以下代码禁用添加到TextField
的所有现有Scene
的默认上下文菜单。
for (Node node : scene.getRoot().lookupAll("*")) {
if (node instanceof TextField) {
((TextField)node).setContextMenu(new ContextMenu());
}
}
但是如果稍后再向TextField
添加Scene
,则不会禁用其默认上下文菜单。
如果你每次添加TextField
时运行上面的代码,就没有问题,但是这很麻烦。
那么有没有办法禁用所有TextField
的默认上下文菜单(包括稍后在场景图中添加的菜单)?
答案 0 :(得分:2)
CONTEXT_MENU_REQUESTED
event可以通过添加到Node
的事件过滤器或包含所有{{1的Scene
到达目标Parent
之前消耗s不应该打开上下文菜单:
TextField
scene.addEventFilter(ContextMenuEvent.CONTEXT_MENU_REQUESTED, evt -> {
if (checkTextField((Node) evt.getTarget())) {
evt.consume();
}
});
答案 1 :(得分:1)
您可以使用CSS删除TextField
个对象的上下文菜单:
.text-field * .context-menu {
visibility: hidden;
}
.text-field * .context-menu > .scroll-arrow {
-fx-opacity: 0;
}
第一个样式类本身隐藏ContextMenu
。第二个隐藏了小箭头。