以下代码禁用添加到 Scene
的所有现有 TextField
的默认上下文菜单。
for (Node node : scene.getRoot().lookupAll("*")) {
if (node instanceof TextField) {
((TextField)node).setContextMenu(new ContextMenu());
}
}
但是如果您稍后将另一个 TextField
添加到 Scene
中,它的默认上下文菜单不会被禁用。
如果每次添加TextField
都运行上面的代码,是没有问题的,但是比较麻烦。
那么有什么方法可以禁用所有TextField
(包括后来添加到场景图中的)的默认上下文菜单吗?
最佳答案
CONTEXT_MENU_REQUESTED
event可以在它到达目标 Node
之前被添加到 Scene
或添加到包含所有 的
:Parent
的事件过滤器使用不应打开上下文菜单的 TextField
scene.addEventFilter(ContextMenuEvent.CONTEXT_MENU_REQUESTED, evt -> {
if (checkTextField((Node) evt.getTarget())) {
evt.consume();
}
});
// check, if the node is part of a TextField
public static boolean checkTextField(Node node) {
while (node != null) {
if (node instanceof TextField) {
return true;
}
node = node.getParent();
}
return false;
}
关于java - 如何全局禁用默认上下文菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38417440/