Java FX菜单ActionListener

时间:2018-01-04 16:16:00

标签: java events actionlistener fxml

因为两天我正在为我的问题寻找解决方案。

我在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作为示例并获取单击的菜单项文本。

感谢您的帮助!

2 个答案:

答案 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 ...
    });

}

我建议使用JavaFX scene builder 2.0

答案 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