JavaFX 应用程序的全局菜单

Gob*_*ath 15 menu unity java javafx

我知道我们可以使用 Jayatana 为 Java Swing 应用程序启用全局菜单。但我正在寻找对JavaFX应用程序的全局菜单支持。搜索之后,我发现在 JavaFX 中使用setUseSystemMenuBar来在 Mac 中启用相同类型的行为。但它在 Ubuntu 中不起作用。

我的Java代码:

import javafx.application.*;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.scene.paint.*;
import javafx.stage.*;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) {
        BorderPane root = new BorderPane();
        Scene scene = new Scene(root, 300, 250, Color.WHITE);

        MenuBar menuBar = new MenuBar();
        // Use system menu bar
        menuBar.setUseSystemMenuBar(true);
        menuBar.prefWidthProperty().bind(primaryStage.widthProperty());
        root.setTop(menuBar);

        Menu fileMenu = new Menu("File");

        Menu webMenu = new Menu("Web");

        Menu sqlMenu = new Menu("SQL");

        menuBar.getMenus().addAll(fileMenu, webMenu, sqlMenu);

        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

输出:

Ubuntu 中的 JavaFX 菜单

这里还有一个关于这个问题的错误报告:Gtk:实现全局系统菜单栏支持

是否有任何解决方法可以解决此问题?

Dee*_*rer 2

查看代码,我不是经验丰富的 FX 开发人员,但它看起来像“root.setTop(menuBar);”行 将菜单栏定位在容器的顶部,而不是整个显示的顶行。我认为其他一些命令是必要的。我只有 Java AWT 和 Swing 经验,可能是错误的。


小智 0

如果还没有解决的话。您可以尝试使用单独的 fxml 文件来设计 UI。使用场景生成器进行相同的操作。 场景生成器,从这里下载相同的。

我在 ubuntu 16.04 中尝试过同样的操作,效果很好。希望能帮助到你。