我正在編寫一個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