我想要类似的东西:
public void changeSceneOnBtnClick(ActionEvent event, String fxmlFile, TextField playerName){
...
...
}
@FXML Button button;
button.setOnAction(changeSceneOnBtnClick(event, "stage1.fxml", playerName1));
,但是setonaction方法中唯一允许的参数是事件。我的目标是使用带参数的函数来防止只更改了一些值的重复代码,如fxml-filename.
…
setOnAction()
方法中唯一允许的参数是事件。
没有:setOnAction()
方法的唯一参数是一个EventHandler
,一个功能接口定义一个方法,该方法将在按钮被触发时调用。该方法名为handle()
,在调用时将接收ActionEvent
作为其参数。
是否有一种方法可以传递额外的参数给
setOnAction
方法?
对给定一个方法,其参数如下:
private void changeSceneOnBtnClick(ActionEvent event,
String fileName, TextField playerName) {
…
}
你可以告诉按钮调用该方法与参数当点击像这样:
button.setOnAction((event) -> changeSceneOnBtnClick(
event, "stage1.fxml", new TextField("Player 1")));
如这里所述,这是this的简写:
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
changeSceneOnBtnClick(
event, "stage1.fxml", new TextField("Player 1"));
}
});
:虽然我还没有看到它的用例,你也可以在自己的EventHandler
中聚合属性,并像这样使用它:
button.setOnAction(new MyEventHandler("stage1.fxml", new TextField("Player 1")));
…
private static final class MyEventHandler implements EventHandler<ActionEvent> {
private final String fileName;
private final TextField playerName;
public MyEventHandler(String fileName, TextField playerName) {
this.fileName = fileName;
this.playerName = playerName;
}
@Override
public void handle(ActionEvent event) {
…
}
}
肯定:批判性地审查你的设计,要知道许多方案最终都被扔进了垃圾桶。搜索满足您目标的设计:例如,研究这种动态添加节点的方法。