2

我想向javafx.scene.control.MenuMenuBar 添加一个空,并在单击它时让它调用一个方法。

我试过使用menu.setOnShowing(new EventHandler<Event>(){});没有运气。

这是我目前正在使用的内容:

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;
}

但是,单击菜单不会调用 onShowing 事件。

4

2 回答 2

2

Menu需要至少包含一个MenuItem事件才能触发。

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);
    }
}

我得到的输出如下所示:

在此处输入图像描述

于 2012-11-18T22:31:11.453 回答
1

尽管 API 另有建议,onShowing但当菜单中没有 MenuItem 或它们都被隐藏时,不会调用该事件。

我能够通过在这样的事件中使用菜单的hide()方法来解决这个问题。onShown

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;
}
于 2012-11-19T03:16:28.460 回答