У меня есть кнопка входа, которая выглядит так:
<Button fx:id="loginButton" mnemonicParsing="false" onAction="#doLogin" prefHeight="29.0" prefWidth="127.46630859375" text="Login" />
Когда кнопка нажата, я хочу установить onAction в "#doLogout"
в коде
Я знаю, что есть метод button.setOnAction, но у него есть параметр ActionEvent, и у меня есть проблема, что во внутреннем классе, который я должен был бы сделать, когда я использую этот параметр, у меня нет доступа к переменным в классе outher, что мне нужно.
Есть ли другое решение этой проблемы?
Попробуйте что-то вроде этого:
//In the Controller class
@FXML
private Button loginButton = new Button();
//...
//... on The public void initialize method of the Controller
//...
loginButton.setId("loginButton");
loginButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
Object source = e.getSource();
if (source instanceof Button) { //always true
//Do whatever you want when the event occurs
Button temp = (Button) source;
DoSomething(temp.getId());
}
}
});
Затем после входа в систему:
loginButton.setId( "logoutButton");
или создать флаг:
public boolean userLogged = false;
и проверьте его, чтобы определить, что должна делать кнопка, как здесь:
loginButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
if(userLogged)
doLogout();
else
doLogin();
}
});