javafx UI を作成しており、クリックされた MenuItem の eventHandler から contextMenu の所有者 Node を取得したいと考えています。
私のコード:
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 が選択されたタブへの参照が必要なので、それを使ってクールなことを行うことができます。