我有一个适用于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);
}
答案 0 :(得分:0)
已修改NSMenuFX以更正此问题。寻找2.1.4或更高版本。