JavaFX FXML - 使用fx:id获取MenuItem

时间:2018-06-13 13:08:44

标签: java javafx fxml scenebuilder

我正在使用Scene Builder构建Java应用程序的GUI。对于每个元素,我给它一个fx:id,以便我稍后可以参考它们。我需要在其许多元素上使用setOnAction(),例如:

((Button)mainPane.lookup("#submitButton")).setOnAction(e->{
    // ... code triggered when button is pressed ...
});

这适用于除MenuItem以外的大多数元素。当我尝试以下操作时,Eclipse告诉我“无法从Node投射到MenuItem”并且它不起作用。

// Does not work
((MenuItem)mainPane.lookup("#about")).setOnAction(e->{
    // ... take user to about page ...
});

我发现MenuItem仅展开Object,因此无法从Node投放。如何使用MenuItem取回fx:id

注意:我知道我可以使用FXML的On Action,但我想利用Lambda函数并保持事件处理代码的风格相同。

1 个答案:

答案 0 :(得分:3)

((Button)mainPane.lookup("#submitButton"))< - 是一个糟糕的主意。

如果您的节点有fx:id。你应该@FXML YourNodeType yourNodeFx:Id;

示例:在FXML中Button's fx:id="submitButton"。您的Controller代码应如下所示:

@FXML Button submitButton;

在初始化方法中,你应该这样做:

submitButton.setOnAction(event ->{
    //Your code here!
});