web-dev-qa-db-ja.com

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);
    }
}

出力:

JavaFX Menu in Ubuntu

また、この問題に関するバグレポートもここにあります。 Gtk:グローバルシステムメニューバーサポートの実装

この問題を解決する回避策はありますか?

14
Gobinath

コードを見ると、私は経験豊富なFX開発者ではありませんが、「root.setTop(menuBar);」という行のように見えます。合計表示の一番上の行ではなく、コンテナの一番上にメニューバーを配置しています。他のコマンドが必要だと思います。 Java AWTとSwingの経験しかなく、間違っている可能性があります。

1
DeepExplorer

まだ解決していない場合。 UIの設計に別のfxmlファイルを使用してみてください。同じためにシーンビルダーを使用します。 Scene builder 、同じものを here からダウンロードします。

私はubuntu 16.04で同じことを試しましたが、うまくいきます。それが役に立てば幸い。

0