Не могу использовать систему Menubar Javafx
Я хочу добавить строку меню JavaFX в рабочую область, но я использую System Menubar для Mac.
Моя проблема заключается в том, что с помощью:
menuBar.useSystemMenuBarProperty().set(true);
не работает. Я считаю, что проблема в том, что мой основной метод не является частью приложения JavaFX. Мой основной метод выглядит так:
public class SURPG_Launcher {
public static com.apple.eawt.Application macApp;
public static void main(String[] args) {
if(Toolbox.isMac()) {
initMac(args);
} else {
Application.launch(SURPG_Main.class, args);
}
}
private static void initMac(String[] args) {
System.out.println("MacOS System detected!");
macApp = com.apple.eawt.Application.getApplication();
macApp.setPreferencesHandler(new PreferencesHandler(){
@Override
public void handlePreferences(PreferencesEvent arg0) {
Platform.runLater(() -> {
Stage prefs = new Stage();
prefs.setMinHeight(200);
prefs.setMinWidth(200);
prefs.show();
});
}
});
Application.launch(SURPG_Mac.class, args);
}
}
SURPG_Mac.class и SURPG_Main.class являются классами, расширяющими приложение JavaFX.
У меня есть другой класс, который устанавливает графический интерфейс, этап с BorderPane. У меня есть другой класс с общедоступными статическими методами, которые можно вызывать для установки меню:
public class MenuControl {
public static MenuBar menuBar;
public static Menu menuFile;
public static Menu menuGame;
public static Menu menuTools;
public static MenuItem save;
public static void initMenusMac() {
menuBar = new MenuBar();
Platform.runLater(() -> {
menuBar.useSystemMenuBarProperty().set(true);
});
menuFile = new Menu("File");
menuGame = new Menu("Game");
menuTools = new Menu("Tools");
save = new MenuItem("Save");
menuFile.getItems().add(save);
menuBar.getMenus().addAll(menuFile, menuGame, menuTools);
GUI_Main.totalLay.setTop(menuBar);
}
public static void initMenus() {
menuBar = new MenuBar();
menuFile = new Menu("File");
menuGame = new Menu("Game");
menuTools = new Menu("Tools");
save = new MenuItem("Save");
menuFile.getItems().add(save);
menuBar.getMenus().addAll(menuFile, menuGame, menuTools);
GUI_Main.totalLay.setTop(menuBar);
}
}
И последнее, что я НЕ МОГУ изменить, так что основной метод - SURPG_Mac или SURPG_Main, из-за другой проблемы совместимости с интеграцией Mac.
Кто-нибудь может мне с этим помочь?
Огромное спасибо заранее!
1 ответ
Посмотрите на этот вопрос: https://github.com/codecentric/NSMenuFX Это позволяет вам иметь более похожую на Mac строку меню. Но вам, вероятно, придется очистить ваш довольно странный проект, прежде чем вы сможете его использовать.