JavaFX: есть ли простой способ изменить метод обработчика onAction в коде?

1

У меня есть кнопка входа, которая выглядит так:

<Button fx:id="loginButton" mnemonicParsing="false" onAction="#doLogin" prefHeight="29.0" prefWidth="127.46630859375" text="Login" />

Когда кнопка нажата, я хочу установить onAction в "#doLogout" в коде

Я знаю, что есть метод button.setOnAction, но у него есть параметр ActionEvent, и у меня есть проблема, что во внутреннем классе, который я должен был бы сделать, когда я использую этот параметр, у меня нет доступа к переменным в классе outher, что мне нужно.

Есть ли другое решение этой проблемы?

  • 1
    Передайте ссылку внешнего класса на внутренний класс. Не создавайте статический внутренний класс
Теги:
javafx

1 ответ

1
Лучший ответ

Попробуйте что-то вроде этого:

//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();

                        }
});
  • 0
    идея с флагом гениальна, спасибо за это!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню