Java FX菜单ActionListener

问题描述 投票:0回答:2

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

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

谢谢你的帮助!

java events actionlistener fxml
2个回答
0
投票

第一种方法:

<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


0
投票

非常感谢您的帮助!我理解这个方法,但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 ");
}
© www.soinside.com 2019 - 2024. All rights reserved.