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的等价物?
答案 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());