Je sais que nous pouvons activer le menu global pour les applications Java Swing utilisant Jayatana. Mais je cherche un support de menu global pour les applications JavaFX . Après une recherche, j’ai trouvé que setUseSystemMenuBar est utilisé dans JavaFX pour permettre le même type de comportement sous Mac. Mais cela ne fonctionne pas dans Ubuntu.
Mon code 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);
}
}
Sortie:
Il existe également un rapport de bogue concernant ce problème ici: Gtk: implémenter le support de la barre de menus du système global
Existe-t-il des solutions de contournement pour résoudre ce problème?
En regardant le code, je ne suis pas un développeur FX expérimenté, mais cela ressemble à la ligne "root.setTop (menuBar);" est en train de localiser la barre de menus en haut de votre conteneur, pas dans la rangée supérieure de l’affichage total. Je pense qu'une autre commande est nécessaire. Je n'ai que Java AWT et de l'expérience Swing et peut être faux.
Si pas résolu déjà. Vous pouvez essayer d'utiliser un fichier fxml séparé pour concevoir l'interface utilisateur. Utilisez le générateur de scène pour la même chose. Générateur de scènes , téléchargez le même depuis ici .
J'ai essayé la même chose dans Ubuntu 16.04 et cela fonctionne bien. J'espère que ça aide.