8
votes

Javafx 8 peut-il définir une barre de menus par défaut?

Une application de jouet triviale avec une barre de menu d'écran peut être écrite comme celle-ci dans Java FX 8:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.input.KeyCombination;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Main extends Application {
    public static void main(final String[] args) throws Exception {
        launch(Main.class, args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        MenuBar menuBar = new MenuBar();
        Menu fileMenu = new Menu("File");
        MenuItem newNotebookMenuItem = new MenuItem("New Notebook...");
        newNotebookMenuItem.setAccelerator(KeyCombination.keyCombination("Meta+N"));
        newNotebookMenuItem.setOnAction(event -> { System.out.println("Action fired"); });
        fileMenu.getItems().add(newNotebookMenuItem);
        menuBar.getMenus().add(fileMenu);
        menuBar.setUseSystemMenuBar(true);

        VBox root = new VBox();
        root.getChildren().add(menuBar);
        Scene scene = new Scene(root, 400, 350);
        stage.setScene(scene);
        stage.show();
    }
}


1 commentaires

Vous pouvez envisager de créer un Demande de fonctionnalité JavaFX .


3 Réponses :


-1
votes

1 commentaires

Cela fonctionne pour AWT / Swing mais pas pour JavaFX, qui n'est pas basé sur AWT.



1
votes

Actuellement, mon astuce est la suivante:

Pane pane = new Pane();
pane.maxWidth(1);
pane.maxHeight(1);
pane.resize(1, 1);
pane.getChildren().add(menuBar);
Scene scene = new Scene(pane,1,1);
scene.setFill(null);
primaryStage.initStyle(StageStyle.TRANSPARENT);
primaryStage.setWidth(1);
primaryStage.setHeight(1);
primaryStage.setScene(scene);
primaryStage.show();


0 commentaires

1
votes

Voici une autre possibilité sans piste de scène, mais sachez-la d'utiliser des API privées: xxx

IMPORTANT: Ceci est une solution OS X uniquement, alors vous toujours besoin d'ajouter votre menu à la scène pour d'autres systèmes d'exploitation.


1 commentaires

Il utilise des API privées com.sun.javafx , donc je suppose que ce n'est pas pris en charge officiellement, mais semble bien fonctionner avec OS X Oracle Java 8. Je le couple avec un appel à plateforme.setimplicitexit (Faux); Pour arrêter l'application, arrêtez-vous automatiquement lorsque la dernière fenêtre est fermée.