当前位置: 首页 > 知识库问答 >
问题:

无法使用系统菜单栏Javafx

越朗
2023-03-14

我想在Stage中添加一个JavaFX菜单栏,但是让它使用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 应用程序的类。

我有另一个设置GUI的类,一个带有BorderPane的阶段。我有另一个具有公共静态方法的类,可以调用它来设置Menubars,如下所示:

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个答案

孙洋
2023-03-14

看看这个项目: https://github.com/codecentric/NSMenuFX 它允许你有一个更像Mac的菜单栏。但是,在使用它之前,您可能还必须清理有些奇怪的项目设置。

 类似资料:
  • 问题内容: 首先,我是一位经验丰富的C程序员,但是刚接触python。我想使用pyqt在python中创建一个简单的应用程序。让我们想象一下这个应用程序,就像它在运行时一样简单,它必须在系统托盘中放置一个图标,并且在菜单中提供了退出该应用程序的选项。 这段代码有效,它显示了菜单(为了简化起见,我没有连接退出动作,依此类推) 但这不是: 我可能想念一些东西。没有错误,但是在第二种情况下,当我单击鼠标

  • 5.5.2.菜单系统与 Intent 我们还需要一个地方来切换界面,因此在这里引入 Android 的菜单系统及 Intent 机制,学习通过发送 Intent 实现切换界面的方法。

  • 顶部菜单栏中,设有文件、快捷代码、资源、工具、项目、视图和帮助控件,具体说明如下。 名称 说明 文件 可以控制新建项目、新建文件、保存和运行。文件支持.js、.css、.html和.json格式。 快捷代码 可直接将所需代码添加到所编辑的项目文件(光标所在位置)中。 资源 可打开工具栏中的相应面板,将提供的模型、园区、地图等资源加载到项目文件中。还可以查看并设置我的项目、我的园区和我的地图。参阅资

  • 左侧菜单栏包括图层、场景和底图。本章节中,我们将详细介绍菜单栏各功能的使用方法。 图层 图层的概念跟制图软件大致相同,可以理解为是堆叠在一起的透明纸。在 CityBuilder 中,通过图层可将数据文件加载到场景中,如城市建筑、道路、水系等。除了快速入门中介绍的加载公共数据以外,我们还可以上传本地的数据文件。 按下列步骤,将我的数据加载到图层中,并设置图层属性。 在左侧菜单栏中,点击图层右侧添加图

  • CampusBuilder 场景编辑器的顶部菜单栏设有7个基本功能项,包括文件、编辑、选择、工具、视角、插件和帮助。 文件 顶部菜单栏的文件控件包含以下功能: 可以打开本地 3D 场景文件; 将文件保存/另存为,在我的场景中可以看到保存后的场景,最后保存时的窗口图将作为场景的封面; 导入模型文件,支持的文件格式包括 .fbx, .obj, .3ds, .stl, .dae, .3d, .3mf 等

  •        包括开始菜单,在线地图菜单、操作菜单、分析菜单、三维场景菜单、视图菜单以及数据处理菜单等7个主菜单。