2016-06-29 1 views
0

У меня есть приложение JavaFX для Mac, и я использую NSMenuFX для создания строки меню. Я создаю свое приложение с помощью MenuToolkit. Если я использую метод setApplicationMenu, меню отображается правильно. Например, он говорит «Выйти из MyApplication» вместо Quit com.example.MyApplication. Однако у меня есть код, который отменяет закрытие приложения, если выполняются определенные условия. У меня есть EventHandler на сцене, который обрабатывает запрос on close. Если приложение не должно закрывать, WindowEvent потребляется. Проблема в том, что приложение все еще закрывается. Однако, если я не использую setApplicationMenu, меню отображается неправильно (это говорит Quit com.example.MyApplication), но использование WindowEvent прекращает закрытие приложения. Я использую Java 1.8u77. Любые идеи о том, что я делаю неправильно? Я не могу воспроизвести эту проблему в примере кода, который поставляется с NSMenuFX. Ниже приведен код, который создает панель меню.nsmenufx MenuToolkit.setApplicationMenu создает непоследовательное поведение

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

ответ

0

NSMenuFX был изменен, чтобы исправить эту проблему. Ищите версию 2.1.4 или новее.