Menu JavaFX:如何检索菜单';s子菜单上下文菜单实例

Menu JavaFX:如何检索菜单';s子菜单上下文菜单实例,menu,javafx-8,contextmenu,Menu,Javafx 8,Contextmenu,我正在尝试获取菜单的子菜单ContextMenu实例。有没有办法做到这一点?实际上,我想在子菜单ContextMenu上添加一些事件过滤器 我试着获取上下文菜单,如下所示 Menu menu = new Menu("Menu"); menu.getItems().addAll(...); // Will be added dynamically menu.setOnShown(e->{ ContextMenu contextMenu = menu.getItems().get(0)

我正在尝试获取菜单的子菜单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(..., ...);
});
如何确保只在关联菜单中设置一次事件过滤器?
请注意,菜单可以是菜单栏中的项目,也可以是菜单本身中的项目。

您提到菜单可以是菜单栏或菜单。因此,这取决于菜单嵌套的深度,以及
getItems().get(0)
是否也可以返回菜单项

因此,以下代码可能是第一个问题的解决方案:

menu.getItems().get(0).getParentMenu().getParentMenu().getParentPopup();
// or
menu.getItems().get(0).getParentMenu().getParentPopup();
// or...

与您的第二个问题相关:您必须记住已经添加了哪些EventHandler,例如在集合中。或者使用您已经在
菜单.setOnShown
中使用的所谓方便方法之一

你的例子似乎不完整。您在哪里添加了<代码>菜单> <代码>到一个实例>代码> CONTRONMENT < /COD>。您是否认为在LAMBDA中调用<代码> GeTimes()/代码>不引用<代码>菜单>代码>实例?@ OLFOKHLHAAS,抱歉,这是一个在LAMBDA中不包含菜单。我纠正了它。关于你的第一个问题,我想你没有明白我真正的问题。我的问题是关于子菜单的上下文菜单。我们不会为子菜单设置上下文菜单。它由JavaFX在内部处理。