我正在编写一个javafx UI,并希望从被单击的MenuItem的eventHandler中获取contextMenu的所有者节点。Javafx 2.0 - 在EventHandler中获取ContextMenu父节点
我的代码:
TabPane tabPane = new TabPane();
Tab tab1 = new Tab();
Tab tab2 = new Tab();
tabPane.getTabs().addAll(tab1,tab2);
ContextMenu contextMenu = new ContextMenu();
MenuItem menuItem = new MenuItem("Do Some Action");
menuItem.setOnAction(new EventHandler<ActionEvent>(){
@override
public void handle(ActionEvent e){
// Get the tab which was clicked on and do stuffs with it
}
});
contextMenu.getItems().add(menuItem);
for(Tab tab: tabPane.getTabs()){
tab.setContextMenu(contextMenu);
}
我想这样做的就是到了它的文本菜单中选择的选项卡的参考。
我能得到什么似乎是菜单项的文本菜单用下面的代码手柄(ActionEvent的五)内部方法的菜单项事件处理程序的引用:
ContextMenu menu = ((ContextMenu)((MenuItem)e.getSource()).getParentPopup());
我的想法从那里是在菜单上使用ContextMenu的.getOwnerNode()方法,然后对该选项卡进行引用,但运行时我得到了一个我无法理解的项目的引用。
.getOwnerNode()返回的对象的toString()方法返回“TabPaneSkin $ TabHeaderSkin $ 3 @ 14f59cef”,我无法弄清楚它的含义。
我的方法是试图按照我的方式向上链,直到我到达节点正确或有一个完全不同的方法,这会更好地工作吗?
我需要的就是ContextMenu的功能,并且当点击MenuItem时,我需要引用选中ContextMenu的选项卡,以便我可以使用它进行很酷的操作。
感谢您的快速反应和很好的解决方案。 – mcdonasm