是否有一种方法来传递额外的参数到setOnAction方法在JavaFX?



我想要类似的东西:

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) {
…
}
}

肯定:批判性地审查你的设计,要知道许多方案最终都被扔进了垃圾桶。搜索满足您目标的设计:例如,研究这种动态添加节点的方法。

相关内容

  • 没有找到相关文章

最新更新