JavaFX将ActionListener添加到按钮

Mer*_*rtG 6 java user-interface javafx actionlistener

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

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

button.addActionListener(someControllerClass.createButtonListener());
Run Code Online (Sandbox Code Playgroud)

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

我的问题是:JButton addActionListener等效于什么?

SSc*_*tte 6

如果您想例如重用EventHandler,请像JavaFX文档中所述将其定义为:

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

现在,您可以通过以下方式将定义添加buttonHandleronAction按钮的:

button.setOnAction(buttonHandler);
Run Code Online (Sandbox Code Playgroud)

并引用提供删除选项以确保完整性的文档:

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

为您带来:

button.setOnAction(null)
Run Code Online (Sandbox Code Playgroud)

该文档还提供了一些示例,说明如何为特定事件添加处理程序-这是一本好书。


Mer*_*rtG 2

我想这才是我应该做的。创建处理程序:

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

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

将处理程序添加到按钮:

btnSol.addEventHandler(MouseEvent.MOUSE_CLICKED, biddingHelperFrameController.createSolButtonHandler());
Run Code Online (Sandbox Code Playgroud)