Tabs JavaFX2.0-获取EventHandler中的ContextMenu父节点
我正在编写一个JavaFXUI,希望从单击的MenuItem的eventHandler中获取contextMenu的所有者节点 我的代码:Tabs JavaFX2.0-获取EventHandler中的ContextMenu父节点,tabs,javafx-2,contextmenu,Tabs,Javafx 2,Contextmenu,我正在编写一个JavaFXUI,希望从单击的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 =
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的.getOwnerNode()方法,然后对选项卡进行引用,但在运行时,我得到了一个对我无法理解的项的引用
.getOwnerNode()返回的对象的toString()方法返回“TabPaneSkin$TabHeaderSkin$3@14f59cef“我不明白这是什么意思
在到达节点之前,我尝试沿着链向上移动的方法是正确的,还是有一种完全不同的方法可以更好地工作
我所需要的只是一个ContextMenu的功能,当点击菜单项时,我需要有一个对选中ContextMenu的选项卡的引用,这样我就可以用它做一些很酷的事情
final Tab tab = new Tab("xyzzy");
ContextMenu contextMenu = new ContextMenu();
MenuItem menuItem = new MenuItem("Do Some Action");
menuItem.setOnAction(new EventHandler<ActionEvent>(){
@Override public void handle(ActionEvent e){
tab.setText("Activated by User");
}
});
final Tab=new Tab(“xyzy”);
ContextMenu ContextMenu=新建ContextMenu();
MenuItem MenuItem=新MenuItem(“执行某些操作”);
setOnAction(新的EventHandler(){
@重写公共无效句柄(ActionEvent e){
tab.setText(“由用户激活”);
}
});
每次用户右键单击选项卡标题并选择“计数单击”菜单时,相关选项卡的内容都会更新为该选项卡到目前为止计数的单击次数
以下是一个可执行示例:
import javafx.application.*;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.stage.Stage;
public class TabContext extends Application {
@Override public void start(Stage stage) {
TabPane tabPane = new TabPane();
tabPane.getTabs().addAll(
createTab("xyzzy", "aliceblue"),
createTab("frobozz", "blanchedalmond")
);
stage.setScene(new Scene(tabPane));
stage.show();
}
private Tab createTab(String tabName, String webColor) {
final Label content = new Label("0");
content.setAlignment(Pos.CENTER);
content.setPrefSize(200, 100);
content.setStyle("-fx-font-size: 30px; -fx-background-color: " + webColor + ";");
final Tab tab = new Tab(tabName);
tab.setContent(content);
ContextMenu contextMenu = new ContextMenu();
MenuItem menuItem = new MenuItem("Count Click");
menuItem.setOnAction(new EventHandler<ActionEvent>(){
@Override public void handle(ActionEvent e){
content.setText(
"" + (Integer.parseInt(content.getText()) + 1)
);
}
});
contextMenu.getItems().add(menuItem);
tab.setContextMenu(contextMenu);
return tab;
}
public static void main(String[] args) { Application.launch(args); }
}
导入javafx.application.*;
导入javafx.event.ActionEvent;
导入javafx.event.EventHandler;
导入javafx.geometry.Pos;
导入javafx.scene.scene;
导入javafx.scene.control.*;
导入javafx.stage.stage;
公共类TabContext扩展应用程序{
@覆盖公共无效开始(阶段){
TabPane TabPane=新建TabPane();
tabPane.getTabs().addAll(
createTab(“xyzzy”、“aliceblue”),
createTab(“泡沫”、“白杏仁”)
);
stage.setScene(新场景(tabPane));
stage.show();
}
私有选项卡createTab(字符串选项卡名称、字符串webColor){
最终标签内容=新标签(“0”);
内容设置对齐(位置中心);
content.setPrefSize(200100);
content.setStyle(“-fx字体大小:30px;-fx背景色:“+webColor+”;”);
最终选项卡=新选项卡(选项卡名称);
tab.设置内容(content);
ContextMenu ContextMenu=新建ContextMenu();
MenuItem MenuItem=新建MenuItem(“计数单击”);
setOnAction(新的EventHandler(){
@重写公共无效句柄(ActionEvent e){
content.setText(
“”+(Integer.parseInt(content.getText())+1)
);
}
});
contextMenu.getItems().add(menuItem);
tab.setContextMenu(contextMenu);
返回选项卡;
}
公共静态void main(字符串[]args){Application.launch(args);}
}
或者,通过这种方式使用匿名内部类,您可以创建一个带有构造函数的EventHandler子类,该构造函数包含EventHandler所附加的选项卡
class TabContextMenuHandler implements EventHandler<ActionEvent> {
private final Tab tab;
TabContextMenuHandler(Tab tab) {
this.tab = tab;
}
@Override public void handle(ActionEvent event) {
tab.setText("Activated by User");
}
}
类TabContextMenuHandler实现EventHandler{
私有最终选项卡;
TabContextMenuHandler(选项卡){
this.tab=tab;
}
@重写公共无效句柄(ActionEvent事件){
tab.setText(“由用户激活”);
}
}
class TabContextMenuHandler implements EventHandler<ActionEvent> {
private final Tab tab;
TabContextMenuHandler(Tab tab) {
this.tab = tab;
}
@Override public void handle(ActionEvent event) {
tab.setText("Activated by User");
}
}