因为两天我正在为我的问题寻找解决方案。
我有fxml文件中的默认菜单:
<MenuBar>
<menus>
<Menu mnemonicParsing="false" text="File">
<items>
<MenuItem mnemonicParsing="false" text="Close" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Edit">
<items>
<MenuItem mnemonicParsing="false" text="Delete" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Help">
<items>
<MenuItem mnemonicParsing="false" text="About" />
</items>
</Menu>
</menus>
</MenuBar>
但是现在我不知道将来有多少项目会有菜单。
我需要设置一个ActionListener作为示例并获取单击的菜单项文本。
谢谢你的帮助!
第一种方法:
<MenuBar>
<menus>
<Menu mnemonicParsing="false" text="File">
<items>
<MenuItem mnemonicParsing="false" onAction="#actionHandler" text="Close" />
</items>
</Menu>
</menus>
</MenuBar>
你必须使用onAction =“#actionHandler”param,并在你的控制器类中像一个方法一样初始化:
@FXML
private void actionHandler(ActionEvent event) {
//action....
}
第二种方法:
<Menu mnemonicParsing="false" text="File">
<items>
<MenuItem fx:id="menuItem" mnemonicParsing="false" text="Close" />
</items>
</Menu>
将id =“menuItem”设置为fxml元素,然后init元素(Node)在控制器类中使用fx:id,如字段,并使用.setOnAction或.addEventHandler + Type of ActionEvent添加处理程序:
@FXML
private MenuItem menuItem;
public void initMenuAction(){
menuItem.setOnAction(action -> {
// action ...
});
menuItem.addEventHandler(ActionEvent.ACTION,action ->{
// action ...
});
}
我建议使用qazxsw poi
非常感谢您的帮助!我理解这个方法,但fx:id应该是唯一的,还是我可以使用相同的?
您可以在一个控制器范围中使用相同的方法,但也可以使用相同的方法。每个控制器都有自己的变量和方法范围,它们绑定到fx:id。
JavaFX scene builder 2.0
打印:
<Button fx:id="button1" mnemonicParsing="false" onAction="#button1" />
<Button mnemonicParsing="false" onAction="#button1" />
@FXML
public void button1(ActionEvent e){
System.out.println( e.getSource() +" = source ");
}