我正在使用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函数并保持事件处理代码的风格相同。
答案 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!
});