JavaFX 2菜单按钮

时间:2014-11-17 06:05:34

标签: java javafx javafx-2

我正在尝试创建一个包含多个项目的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如何工作。我发现的所有信息只告诉你如何填充它们,但我已经预先填充了它们......

1 个答案:

答案 0 :(得分:1)

MenuMenuButton不会维护&#34; selectedItem&#34;州。当用户点击它们时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是最好的选择,但我认为你的真实例子有更多的选择。