我无法将JavaFX MenuBar显示为屏幕顶部的标准OS X菜单栏.
这是我在我的Application子类中尝试过的:
public void start(Stage primaryStage) throws Exception {
final Menu menu1 = new Menu("File");
final Menu menu2 = new Menu("Options");
final Menu menu3 = new Menu("Help");
MenuBar menuBar = new MenuBar();
menuBar.getMenus().addAll(menu1, menu2, menu3);
menuBar.setUseSystemMenuBar(true);
primaryStage.setTitle("Creating Menus with JavaFX 2.0");
final Group rootGroup = new Group();
final Scene scene = new Scene(rootGroup, 800, 400, Color.WHEAT);
rootGroup.getChildren().add(menuBar);
primaryStage.setScene(scene);
primaryStage.show();
}
Run Code Online (Sandbox Code Playgroud)
我假设使用了
menuBar.setUseSystemMenuBar(true);
Run Code Online (Sandbox Code Playgroud)
会做的伎俩,但实际上它使menuBar完全消失.
我在OS X 10.9上使用Java 1.8.0-b132
dmo*_*ony 19
我已成功使用此代码:
MenuBar menuBar = new MenuBar();
final String os = System.getProperty("os.name");
if (os != null && os.startsWith("Mac"))
menuBar.useSystemMenuBarProperty().set(true);
BorderPane borderPane = new BorderPane();
borderPane.setTop(menuBar);
primaryStage.setScene(new Scene(borderPane));
Run Code Online (Sandbox Code Playgroud)
我创建了一个小项目,使您可以访问OS X上自动生成的菜单栏:NSMenuFX
更新:使用新的纯JavaFX版本,API略有变化
它允许您替换默认的Mac OS菜单栏项,因此您可以这样:
// Get the toolkit
MenuToolkit tk = MenuToolkit.toolkit();
// Create default application menu with app name "test"
Menu defaultApplicationMenu = tk.createDefaultApplicationMenu("test");
// Replace the autogenerated application menu
tk.setApplicationMenu(defaultApplicationMenu);
// Since we now have a reference to the menu, we can rename items
defaultApplicationMenu.getItems().get(1).setText("Hide all the otters");
Run Code Online (Sandbox Code Playgroud)
您当然也可以像上面的示例一样添加新的菜单项.