desplegable barra javafx-2

javafx-2 - barra - javafx menubar



Cómo hacer una barra de menú OS X en JavaFX (5)

No puedo hacer que una barra de menús JavaFX aparezca como una barra de menús estándar de OS X, en la parte superior de la pantalla.

Esto es lo que he intentado en mi subclase de Aplicación:

public void start(Stage primaryStage) throws Exception { final Menu menu1 = new Menu("File"); final Menu menu2 = new Menu("Options"); final Menu menu3 = new Menu("Help"); MenuBar menuBar = new MenuBar(); menuBar.getMenus().addAll(menu1, menu2, menu3); menuBar.setUseSystemMenuBar(true); primaryStage.setTitle("Creating Menus with JavaFX 2.0"); final Group rootGroup = new Group(); final Scene scene = new Scene(rootGroup, 800, 400, Color.WHEAT); rootGroup.getChildren().add(menuBar); primaryStage.setScene(scene); primaryStage.show(); }

Asumí que el uso de

menuBar.setUseSystemMenuBar(true);

haría el truco, pero en realidad hace que el menuBar desaparezca por completo.

Estoy usando Java 1.8.0-b132 en OS X 10.9


Acabo de encontrarme con este problema: noté que la barra de menú del sistema no aparecería inicialmente en OSX hasta que cambiara a otra aplicación y volviera.

Envolver la llamada setUseSystemMenuBar en un runLater hizo el truco, así que concluí de manera no científica que se requiere más configuración de la ventana antes de que OSX pueda registrar con éxito un menú de aplicación.

Platform.runLater(() -> menuBar.setUseSystemMenuBar(true));


He tenido éxito con este código:

MenuBar menuBar = new MenuBar(); final String os = System.getProperty("os.name"); if (os != null && os.startsWith("Mac")) menuBar.useSystemMenuBarProperty().set(true); BorderPane borderPane = new BorderPane(); borderPane.setTop(menuBar); primaryStage.setScene(new Scene(borderPane));


Parece que OS X solo muestra los menús si tienen elementos de menú dentro de ellos (lo cual es un poco extraño, ya que puedes adjuntar funcionalidad a los menús vacíos).


Sobre la base de dmolony con algunas correcciones:

MenuBar menuBar = new MenuBar (); if( System.getProperty("os.name","UNKNOWN").equals("Mac OS X")) { menuBar.setUseSystemMenuBar(true); } BorderPane borderPane = new BorderPane (); borderPane.setTop (menuBar); primaryStage.setScene (new Scene (borderPane));


NSMenuFX un pequeño proyecto que le da acceso a la barra de menú generada automáticamente en OS X: NSMenuFX

Actualización: con la nueva versión pura de JavaFX, la API ha cambiado ligeramente

Le permite reemplazar los elementos predeterminados de la barra de menú de Mac OS, por lo que puede hacer algo como esto:

// Get the toolkit MenuToolkit tk = MenuToolkit.toolkit(); // Create default application menu with app name "test" Menu defaultApplicationMenu = tk.createDefaultApplicationMenu("test"); // Replace the autogenerated application menu tk.setApplicationMenu(defaultApplicationMenu); // Since we now have a reference to the menu, we can rename items defaultApplicationMenu.getItems().get(1).setText("Hide all the otters");

Por supuesto, también puede agregar nuevos elementos de menú como lo hace en el ejemplo anterior.