我正在编写一个 javafx UI,并希望从单击的 MenuItem 的 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);
}
我想做的是获得对选择了 contextMenu 的选项卡的引用。
我能够在 menuItem eventHandler 的 handle(ActionEvent e) 方法中使用以下代码获得对 MenuItem 的 ContextMenu 的引用:
ContextMenu menu = ((ContextMenu)((MenuItem)e.getSource()).getParentPopup());
我的想法是在菜单上使用 ContextMenu 的 .getOwnerNode() 方法,然后引用选项卡,但是在运行时我得到一个我无法理解的项目的引用。
.getOwnerNode() 返回的对象的 toString() 方法返回“TabPaneSkin$TabHeaderSkin$3@14f59cef”,我无法弄清楚它的含义。
我尝试沿着链向上工作直到到达节点的方法是正确的,还是有一种完全不同的方法可以更好地工作?
我所需要的只是 ContextMenu 的功能,当单击 MenuItem 时,我需要引用选择了 ContextMenu 的选项卡,这样我就可以用它做一些很酷的事情。