nsmenufx MenuToolkit.setApplicationMenu产生不一致的行为

时间:2016-06-29 14:15:23

标签: macos javafx menu menubar

我有一个适用于Mac的JavaFX应用程序,我使用NSMenuFX创建菜单栏。我使用MenuToolkit创建我的应用程序菜单。如果我使用方法setApplicationMenu,菜单会正确显示。例如,它说Quit MyApplication而不是Quit com.example.MyApplication。但是,如果满足某些条件,我的代码会取消关闭应用程序。我在舞台上有一个处理关闭请求的EventHandler。如果应用程序不应该关闭WindowEvent被消耗。问题是应用程序仍然关闭。但是,如果我不使用setApplicationMenu,则菜单无法正确显示(它表示Quit com.example.MyApplication),但使用WindowEvent会停止关闭应用程序。我使用的是Java 1.8u77。关于我做错了什么的任何想法?我无法在NSMenuFX附带的示例代码中重现此问题。以下是创建菜单栏的代码。

private void createMenu(VBox appBox) {
    // Create the menubar
    MenuBar menuBar = new MenuBar();
    menuBar.useSystemMenuBarProperty().set(true);
    MenuToolkit tk = MenuToolkit.toolkit();
    String appName = "MyApplication";
    Menu appMenu = new Menu(appName);
    menuBar.getMenus().add(appMenu);
    MenuItem aboutItem = tk.createAboutMenuItem("MyApplication");
    aboutItem.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
            AboutDialog aboutDialog = new AboutDialog(null);
            aboutDialog.initOwner(stage);
            aboutDialog.showAndWait();
        }
    });
    appMenu.getItems().add(aboutItem);
    appMenu.getItems().addAll(new SeparatorMenuItem(),
        tk.createHideMenuItem(appName), tk.createHideOthersMenuItem(),
        tk.createUnhideAllMenuItem(),
        new SeparatorMenuItem(), tk.createQuitMenuItem(appName));
    tk.setApplicationMenu(appMenu);
    // Add the File menu
    Menu file = new Menu("File");
    menuBar.getMenus().add(file);
    // Add the Print item
    print = new MenuItem("Print");
    print.setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent event) {
        PrinterJob job = PrinterJob.createPrinterJob();
        if (job != null && job.showPrintDialog(
                lineChart.getChart().getScene().getWindow())) {
            boolean success = job.printPage(lineChart.getChart());
            if (success) {
                job.endJob();
            }
        }
    });
    file.getItems().add(print);
    // Window Menu
    Menu windowMenu = new Menu("Window");
    windowMenu.getItems().addAll(
        tk.createMinimizeMenuItem(), tk.createZoomMenuItem(),
        tk.createCycleWindowsItem(), new SeparatorMenuItem(),
        tk.createBringAllToFrontItem());
    menuBar.getMenus().add(windowMenu);
    tk.autoAddWindowMenuItems(windowMenu);
    tk.setGlobalMenuBar(menuBar);
}

1 个答案:

答案 0 :(得分:0)

已修改NSMenuFX以更正此问题。寻找2.1.4或更高版本。