我正在尝试创建一个包含多个项目的MenuButton。然后,当单击其中一项时,抓住它的价值。但是不知道该怎么做吗?

这是我的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>


我将如何从所选项目中获取文本?因此,如果选择了第一项,我想获取文本“ Set Available”以基于该文本执行操作。但是不知道该怎么做吗?对于文本字段,这很简单,但是不知道这些MenuButtons如何工作。我发现的所有信息仅告诉您如何填充它们,但是我已经预先填充了它们。

最佳答案

MenuMenuButton不保持“ selectedItem”状态。当用户单击MenuItem(或通过键盘快捷键调用其动作)时,ActionEvent将触发。因此,您需要为其注册动作监听器:

<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是最佳选择,但我认为您的实际示例有更多选择。

10-08 01:54