JavaFX应用程序菜单

Vea*_*KII 5 javafx menu

所以我看了一下,但是我无法找到有关如何在JavaFX中创建应用程序菜单的任何信息.

我见过一个项目' Jayatana ',它似乎允许应用程序在Ubuntu中使用至少使用Intellij的适当应用程序菜单(例如).

我还看到一些建议,使用类似下面的内容将适用于OS X用户: -

final List<MenuBase> menus = new ArrayList<>();
menus.add(GlobalMenuAdapter.adapt(menu));
Toolkit.getToolkit().getSystemMenu().setMenus(menus);
Run Code Online (Sandbox Code Playgroud)

还有OSM的NSMenuFX项目.

我也看过java-gnome项目,我觉得它只适用于Swing.

但我真正喜欢的是制作应用程序菜单的一些方法,最好是以非特定于操作系统的方式.

我很高兴使用第三方罐子或任何繁重的东西,但真的,这样的事情存在吗?

在这一点上,我最好的选择是使用Swing来创建JavaFX应用程序的shell,并使用将应用程序菜单与Swing集成的方法吗?如果是这种情况,是否可以从JavaFX自动执行此操作并处理不同实现的切换?

编辑

最后,我简单地使用了Swing和JavaFX的组合.我把JavaFX应用程序放在里面,这允许我使用已经在Swing中运行的应用程序菜单.

不理想,但确实有效.

Jam*_*s_D 3

我认为你只是在寻找MenuBar.useSystemMenuBarProperty()。如果您在菜单栏上调用此方法,那么如果平台支持系统菜单(例如 OS X),则该菜单将不会出现在场景图中,但将用作系统菜单。

SSCCE:

import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class SystemMenuExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        MenuBar menuBar = new MenuBar();
        Menu menu = new Menu("File");
        MenuItem quit = new MenuItem("Quit");
        quit.setOnAction(e -> Platform.exit());
        menu.getItems().add(quit);
        menuBar.getMenus().add(menu);
        menuBar.setUseSystemMenuBar(true);

        BorderPane root = new BorderPane();
        root.setTop(menuBar);
        Scene scene = new Scene(root, 600, 600);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
Run Code Online (Sandbox Code Playgroud)