我正在尝试创建一个包含多个项目的菜单按钮。然后,当单击其中一项时,获取它的值。但不知道如何做到这一点?
这是我的 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>
我将如何从所选项目中获取文本?因此,如果选择第一个项目,我想获取文本“设置可用”以基于该文本执行操作。但不知道该怎么做?对于文本字段来说这很容易,但不知道这些菜单按钮是如何工作的。我找到的所有信息仅告诉您如何填充它们,但我已经预先填充了它们......
最佳答案
Menu
和 MenuButton
不维护“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/