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