Eu sei que podemos ativar o menu global para aplicativos Java Swing usando Jayatana. Mas estou procurando suporte de menu global para aplicativos JavaFX . Depois de pesquisar, descobri que o setUseSystemMenuBar é usado no JavaFX para permitir o mesmo tipo de comportamento no Mac. Mas não está funcionando no Ubuntu.
Meu código 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);
}
}
Resultado:
Também há um relatório de bug referente a esse problema aqui: Gtk: Implementar suporte à barra de menus do sistema global
Existem soluções alternativas para resolver esse problema?
Respostas:
Observando o código, não sou um desenvolvedor experiente de FX, mas parece com a linha "root.setTop (menuBar);" está localizando a barra de menus na parte superior do contêiner, não na linha superior da exibição total. Eu acho que algum outro comando é necessário. Só tenho experiência com Java AWT e Swing e pode estar errado.
fonte
Se ainda não estiver resolvido. Você pode tentar usar um arquivo fxml separado para criar a interface do usuário. Use o construtor de cenas para o mesmo. Scene builder , faça o download do mesmo aqui .
Eu tentei o mesmo no ubuntu 16.04 e funciona bem. Espero que ajude.
fonte