提问者:小点点

JavFX 2菜单按钮


我正在尝试创建一个包含多个项目的菜单按钮。然后,当单击其中一个项目时,获取它的值。但是不知道如何做到这一点?

这是我的FXML中的一个片段:

<MenuButton fx:id="changeStatusButton" layoutX="420.0" layoutY="16.0" mnemonicParsing="false" onAction="#changeStatusFired" prefHeight="26.0" prefWidth="180.0" text="Change My Status" AnchorPane.rightAnchor="17.0">
  <items>
    <MenuItem mnemonicParsing="false" text="Set Available" />
    <MenuItem mnemonicParsing="false" text="Set Unavailable" />
  </items>
</MenuButton>

我将如何从所选项目中抓取文本?因此,如果选择了第一个项目,我想让文本“设置可用”来执行基于此的操作。但不知道如何做到这一点?对于文本字段,这很容易,但不知道这些菜单按钮是如何工作的。我找到的所有信息只告诉你如何填充它们,但我已经预先填充了它们…


共1个答案

匿名用户

Menus和MenuButtons不维护“selectedItem”状态。当用户单击它们(或通过键盘快捷键调用它们的操作)时,MenuItems会触发ActionEvents。因此您需要为它们注册操作侦听器:

<MenuButton fx:id="changeStatusButton" layoutX="420.0" layoutY="16.0" mnemonicParsing="false" prefHeight="26.0" prefWidth="180.0" text="Change My Status" AnchorPane.rightAnchor="17.0">
  <items>
    <MenuItem mnemonicParsing="false" onAction="#setAvailable" text="Set Available" />
    <MenuItem mnemonicParsing="false" onAction="#setUnavailable" text="Set Unavailable" />
  </items>
</MenuButton>

然后在您的控制器中:

private boolean available ;

// ...

@FXML
private void setAvailable(ActionEvent event) {
    available = true ;
}

@FXML
private void setUnavailable(ActionEvent event) {
    available = false ;
}

如果您想要真正的选择功能,您应该考虑使用ComboBox。显然,在本例中,CheckBox将是最佳选择,但我假设您的真实示例有更多选择。