Javafx将ActionListener添加到按钮

时间:2016-11-23 06:56:55

标签: java user-interface javafx actionlistener

button.setOnAction(new EventHandler<ActionEvent>() {
    @Override public void handle(ActionEvent e) {
        label.setText("Accepted");
    }
});

在上面的代码中,我们定义了按下按钮时会发生什么。这一切都很好,但我想创建新的ActionListener,然后将其添加到我的按钮。 通常在JButton中我可以像这样添加ActionListener:

button.addActionListener(someControllerClass.createButtonListener());

在上面的代码中,createButtonListener()返回ActionListener。

我的问题是:什么是JButton addActionListener的等价物?

3 个答案:

答案 0 :(得分:5)

如果你想要,例如重用EventHandler,将其定义为JavaFX Documentation中描述的:

EventHandler<ActionEvent> buttonHandler = new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent event) {
        label.setText("Accepted");
        event.consume();
    }
};

您现在可以通过以下方式将定义的buttonHandler添加到按钮的onAction

button.setOnAction(buttonHandler);

引用提供完整性删除选项的文档:

  

要删除由便捷方法注册的事件处理程序,请将null传递给Conven方法,例如node1.setOnMouseDragged(null).

导致您:

button.setOnAction(null)

该文档还提供了一些如何为特定事件添加处理程序的示例 - 这是一个很好的阅读。

答案 1 :(得分:1)

我认为这就是我应该做的。创建处理程序:

public EventHandler<Event> createSolButtonHandler()
{
    btnSolHandler = new EventHandler<Event>() {

        @Override
        public void handle(Event event) {
            System.out.println("Pressed!");
            biddingHelperFrame.getBtnSag().setVisible(false);
        }
    };
    return btnSolHandler;
}

将按钮添加到按钮:

btnSol.addEventHandler(MouseEvent.MOUSE_CLICKED, biddingHelperFrameController.createSolButtonHandler());

答案 2 :(得分:0)

相同的方法,但是使用lamda表达式更容易:

buttonSave.setOnAction(event -> buttonSaveClicked());