java - JavFX 2 菜单按钮

标签 java javafx javafx-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>

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

最佳答案

MenuMenuButton 不维护“selectedItem”状态。当用户单击菜单项(或通过键盘快捷键调用其操作)时,MenuItem 会触发 ActionEvent。所以你需要为它们注册 Action 监听器:

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

然后在你的 Controller 中:

private boolean available ;

// ...

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

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

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

关于java - JavFX 2 菜单按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26966508/

相关文章:

java - 如何使用 SimpleXML 框架处理继承?

java - 对于 Apache Collections4 Multikey,未经检查的调用意味着什么以及如何修复它?

java - 如果远程调用传播错误,如何让 Spring 致命退出

java - 使用 JNativeHook 仅读取每个按键一次

java - 使用三个单选按钮从水平布局切换到垂直布局

java - 从不同线程修改JavaFX应用程序场景?

JavaFX : avoid thread-code in Model Setters

javafx 使用自动完成功能与数据库

java - 有2个变量的for循环?

java - 只允许在表格 View 上选择一个复选框