JavaFX:有没有一种简单的方法可以在代码中更改onAction Handler的方法?

时间:2014-05-26 20:38:51

标签: java javafx

我有一个看起来像这样的登录按钮:

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

单击按钮时,我想在代码中将onAction设置为"#doLogout"

我知道有一个button.setOnAction方法,但它有ActionEvent参数,我有一个问题,在内部类中,当我使用这个选项时我必须要做的,我无法访问变量我需要的外语课。

这个问题还有其他解决办法吗?

1 个答案:

答案 0 :(得分: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(&#34; logoutButton&#34);

或创建一个标志:

public boolean userLogged = false;

并检查它以定义按钮应该在此处执行的操作:

loginButton.setOnAction(new EventHandler<ActionEvent>() {
                        @Override
                        public void handle(ActionEvent e) {
                            if(userLogged) 
                              doLogout();
                            else
                              doLogin();

                        }
});