JavaFX:如何检索菜单的subMenu ContextMenu实例

时间:2018-07-30 05:28:41

标签: menu javafx-8 contextmenu

我正在尝试获取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本身中的项目。

1 个答案:

答案 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已经使用的一种所谓的便捷方法。