java - 我们如何在 FXML 中定义上下文菜单?
问题描述
虽然我可以在没有 FXML 的情况下定义 ContextMenu,但我找不到在 FXML 中定义上下文菜单的好方法:
在源文件中:
ContextMenu contextMenu = new ContextMenu();
contextMenu.getItems().addAll(someMenuItems);
// This runs perfectly
在 FXML 中:
<ContextMenu fx:id="contextMenu">
</ContextMenu>
// This is incorrect in fxml. The Exception of "Unable to coerce javafx.scene.control.ContextMenu to class javafx.scene.Node" is thrown.
<MenuBar fx:id="menuBar">
//... Some Menu and items could be defined here
</MenuBar>
// This is correct in fxml
我知道 MenuBar 可以工作,因为它扩展了 javafx.scene.control.Control ,它是 javafx.scene.Node 的子类,但 ContextMenu 没有。
那么有什么方法可以在 FXML 中类似地定义 ContextMenu 的属性吗?
解决方案
试试这个
<BorderPane fx:id="borderPane" fx:controller="sample.Controller" xmlns:fx="http://javafx.com/fxml">
<fx:define>
<ContextMenu fx:id="contextMenu">
<items>
<MenuItem text="Menu Item"/>
</items>
</ContextMenu>
</fx:define>
</BorderPane>
public class Controller {
@FXML
private ContextMenu contextMenu;
@FXML
private BorderPane borderPane;
@FXML
private void initialize() {
borderPane.setOnContextMenuRequested(event -> {
contextMenu.show(borderPane, event.getScreenX(), event.getScreenY());
});
}
}
推荐阅读
- discord - 你如何制作一个创建“幽灵”帐户的不和谐机器人?
- r - 每次我尝试显示表格结果时打印标题
- regex - 正则表达式:更改 html 页面中的所有文本内容,但不更改属性中的文本
- mysql - 带有多个and子句的Mysql查询的执行顺序是什么?
- java - 如何限制 ListView 项上显示的字符数
- excel - 我开发的 vba 代码有问题
- wso2 - 使用自定义索赔处理程序的 WSO2 索赔扩展
- php - PHP Excel 禁用单元格..设置受保护
- ios - iOS IAP 用于有限购买数量的商品。消耗还是不消耗?
- eclipse - TestNG 与 eclipse 2019-09 不兼容