2016-06-29 9 views
0

J'ai une application JavaFX pour Mac et j'utilise NSMenuFX pour créer la barre de menus. Je crée mon menu d'application en utilisant MenuToolkit. Si j'utilise la méthode setApplicationMenu, le menu s'affiche correctement. Par exemple, il indique Quit MyApplication au lieu de Quitter com.example.MyApplication. Cependant, j'ai un code qui annule la fermeture de l'application si certaines conditions sont remplies. J'ai un EventHandler sur la scène qui gère la demande de fermeture. Si l'application ne doit pas fermer WindowEvent est consommé. Le problème est que l'application se ferme toujours. Toutefois, si je n'utilise pas setApplicationMenu, le menu ne s'affiche pas correctement (il indique Quit com.example.MyApplication) mais la consommation de WindowEvent arrête la fermeture de l'application. J'utilise Java 1.8u77. Des idées sur ce que je fais incorrectement? Je ne peux pas reproduire ce problème dans l'exemple de code fourni avec NSMenuFX. Voici le code qui crée la barre de menu.nsmenufx MenuToolkit.setApplicationMenu produisant un comportement incohérent

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

Répondre

0

NSMenuFX a été modifié pour corriger ce problème. Recherchez la version 2.1.4 ou supérieure.