Menu 单击菜单栏时是否进行菜单栏调用方法?
我想在菜单栏中添加一个空的Menu 单击菜单栏时是否进行菜单栏调用方法?,menu,javafx-2,Menu,Javafx 2,我想在菜单栏中添加一个空的javafx.scene.control.Menu,并让它在单击时调用一个方法 我尝试过使用menu.setOnShowing(neweventhandler(){})
javafx.scene.control.Menu
,并让它在单击时调用一个方法
我尝试过使用menu.setOnShowing(neweventhandler(){})没有运气
以下是我目前的工作内容:
public MenuBar createMenuBar() {
MenuBar menuBar = new MenuBar();
Menu file = new Menu("File");
Menu addAccountTab = new Menu("Add Tab");
addAccountTab.setOnShowing(new EventHandler<Event>() {
public void handle(Event e) {
System.out.println("addAccountTab Menu clicked.");
}
});
menuBar.getMenus().add(addAccount);
return menuBar;
}
public菜单栏createMenuBar(){
菜单栏菜单栏=新建菜单栏();
菜单文件=新菜单(“文件”);
菜单addAccountTab=新菜单(“添加选项卡”);
addAccountTab.setOnShowing(新的EventHandler(){
公共无效句柄(事件e){
System.out.println(“单击addAccountTab菜单”);
}
});
menuBar.getMenus().add(addAccount);
返回菜单栏;
}
但是,单击菜单不会调用onShowing事件。您的菜单需要至少包含一个菜单项才能触发事件
public class MenuApplication extends Application {
@Override
public void start(Stage primaryStage) {
MenuBar menuBar = new MenuBar();
Menu file = new Menu("File");
Menu addAccountTab = new Menu("Add Tab");
addAccountTab.setOnShowing(new EventHandler<Event>() {
@Override
public void handle(Event e) {
System.out.println("addAccountTab Menu clicked.");
}
});
MenuItem NewMenuItem = new MenuItem("New");
addAccountTab.getItems().add(NewMenuItem);
menuBar.getMenus().addAll(file, addAccountTab);
StackPane root = new StackPane();
root.getChildren().add(menuBar);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
公共类菜单应用程序扩展应用程序{
@凌驾
公共无效开始(阶段primaryStage){
菜单栏菜单栏=新建菜单栏();
菜单文件=新菜单(“文件”);
菜单addAccountTab=新菜单(“添加选项卡”);
addAccountTab.setOnShowing(新的EventHandler(){
@凌驾
公共无效句柄(事件e){
System.out.println(“单击addAccountTab菜单”);
}
});
MenuItem NewMenuItem=新MenuItem(“新”);
addAccountTab.getItems().add(NewMenuItem);
menuBar.getMenus().addAll(文件,addAccountTab);
StackPane root=新的StackPane();
root.getChildren().add(菜单栏);
场景=新场景(根,300,250);
setTitle(“你好,世界!”);
初级阶段。场景(场景);
primaryStage.show();
}
公共静态void main(字符串[]args){
发射(args);
}
}
我得到的输出如下所示:
尽管API提出了相反的建议,但当菜单中没有菜单项或菜单项全部隐藏时,不会调用显示的事件
我可以通过在shown
事件中使用Menu的hide()
方法来解决这个问题
public MenuBar createMenuBar() {
MenuBar menuBar = new MenuBar();
Menu addAccount = MenuBuilder.create()
.onShown(new EventHandler<Event>() {
public void handle(Event e) {
((Menu)e.getSource()).hide();
System.out.println("addAccount Clicked");
}
}).items(new MenuItem())
.text("Add Account").build();
menuBar.getMenus().addAll(addAccount);
return menuBar;
}
public菜单栏createMenuBar(){
菜单栏菜单栏=新建菜单栏();
Menu addAccount=MenuBuilder.create()
.onShown(新的EventHandler(){
公共无效句柄(事件e){
((菜单)e.getSource()).hide();
System.out.println(“点击添加帐户”);
}
}).items(新菜单项())
.text(“添加帐户”).build();
menuBar.getMenus().addAll(addAccount);
返回菜单栏;
}
感谢您的回复,但是我发现使用((菜单)e.getSource()).hide()在菜单的setOnShown()
事件中,code>允许在不显示上下文菜单的情况下单击菜单。