Не могу использовать систему 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 строку меню. Но вам, вероятно, придется очистить ваш довольно странный проект, прежде чем вы сможете его использовать.

Другие вопросы по тегам