JavaFX FXML - 使用 fx:id 获取菜单项



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

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

这适用于除MenuItems 之外的大多数元素。当我尝试以下内容时,Eclipse 告诉我"无法从Node转换为MenuItem"并且它不起作用。

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

我看到MenuItem只扩展Object,所以不能从Node中转换。如何使用其fx:id取回MenuItem

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

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

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

示例:在 FXML 中,您的Button'sfx:id="submitButton".您的Controller代码应如下所示:

@FXML Button submitButton;

在初始化方法中,您应该执行以下操作:

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

最新更新