因为两天我正在为我的问题寻找解决方案。
我在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作为示例并获取单击的菜单项文本。
感谢您的帮助!
答案 0 :(得分:0)
第一种方法:
<MenuBar>
<menus>
<Menu mnemonicParsing="false" text="File">
<items>
<MenuItem mnemonicParsing="false" onAction="#actionHandler" text="Close" />
</items>
</Menu>
</menus>
</MenuBar>
你必须使用 onAction =&#34; #actionHandler&#34; 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 =&#34; menuItem&#34; 设置为fxml元素,然后init元素(Node)在控制器类中使用 fx:id ,如字段和使用 .setOnAction 或 .addEventHandler + ActionEvent类型添加处理程序:
@FXML
private MenuItem menuItem;
public void initMenuAction(){
menuItem.setOnAction(action -> {
// action ...
});
menuItem.addEventHandler(ActionEvent.ACTION,action ->{
// action ...
});
}
答案 1 :(得分:0)
非常感谢你的帮助!我理解这个方法,但是fx:id应该是唯一的,还是可以使用相同的?
您可以在一个控制器范围中使用相同的方法,但是也可以使用相同的方法。 每个控制器都有自己的变量和方法范围,它们绑定到 fx:id 。
<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 ");
}
打印:
Button[id=button1, styleClass=button]'Button1' = source
Button@5adbbf54[styleClass=button]'Button' = source