JavaFX FXML - 使用 fx:id 获取 MenuItem

JavaFX FXML - Getting MenuItem using fx:id

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

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

这适用于除 MenuItems 之外的大多数元素。当我尝试以下操作时,Eclipse 告诉我 "Cannot cast from Node to MenuItem" 但它不起作用。

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

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

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

((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!
});