我正在尝试获取Menu的子菜单ContextMenu实例。有办法吗?我实际上想在子菜单ContextMenu上添加一些事件过滤器。
我尝试如下获取ContextMenu。
Menu menu = new Menu("Menu");
menu.getItems().addAll(...); // Will be added dynamically
menu.setOnShown(e->{
ContextMenu contextMenu = menu.getItems().get(0).getParentPopup();
contextMenu.addEventFilter(..., ...);
});
如何确保仅将事件过滤器设置到上下文菜单一次? 请注意,菜单可以是MenuBar中的项目,也可以是Menu本身中的项目。
答案 0 :(得分:0)
您提到菜单可以是MenuBar或Menu。因此,这取决于菜单的嵌套深度以及getItems().get(0)
是否还可以返回MenuItem。
因此以下代码可能是您第一个问题的解决方案:
menu.getItems().get(0).getParentMenu().getParentMenu().getParentPopup();
// or
menu.getItems().get(0).getParentMenu().getParentPopup();
// or...
与第二个问题有关:您必须记住已添加了哪些EventHandler,例如在集合中。或者使用menu.setOnShown
已经使用的一种所谓的便捷方法。