Installing a Menu Bar and Menus into a Stage We begin with a minimal shell program.
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class MenuSample extends Application { @Override public void start(Stage stage) { stage.setTitle("Menu Sample"); Scene scene = new Scene(new VBox(), 400, 400); stage.setScene(scene); stage.show(); } }
Compilation and running reveals an empty window.
Now add a menu bar. If you run this, you will see the same picture as above, because the menu bar has height 1 px. We need to populate it with something. So here we go.
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class MenuSample extends Application { @Override public void start(Stage stage) { stage.setTitle("Menu Sample"); Scene scene = new Scene(new VBox(), 400, 400); MenuBar mbar = new MenuBar(); mbar.getMenus().addAll(fileMenu, editMenu); ( (VBox) scene.getRoot()).getChildren().addAll(mbar); stage.setScene(scene); stage.show(); } }
We add a file and edit menu.
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class MenuSample extends Application { @Override public void start(Stage stage) { stage.setTitle("Menu Sample"); Scene scene = new Scene(new VBox(), 400, 400); MenuBar mbar = new MenuBar(); Menu fileMenu = new Menu("File"); Menu editMenu = new Menu("Edit"); mbar.getMenus().addAll(fileMenu, editMenu); ( (VBox) scene.getRoot()).getChildren().addAll(mbar); stage.setScene(scene); stage.show(); } }
Compile and run to see this. We have a window with two menus in its menu bar.
Next we populate the file menu.
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class MenuSample extends Application { @Override public void start(Stage stage) { stage.setTitle("Menu Sample"); Scene scene = new Scene(new VBox(), 400, 400); MenuBar mbar = new MenuBar(); Menu fileMenu = new Menu("File"); //populate fileMenu MenuItem newItem = new MenuItem("New") ; MenuItem openItem = new MenuItem("Open...") ; MenuItem closeItem = new MenuItem("Close") ; MenuItem quitItem = new MenuItem("Quit") ; fileMenu.getItems().addAll(newItem, openItem, closeItem, quitItem); Menu editMenu = new Menu("Edit"); mbar.getMenus().addAll(fileMenu, editMenu); ( (VBox) scene.getRoot()).getChildren().addAll(mbar); stage.setScene(scene); stage.show(); } }
We show the file menu being opened here.
Finally, we shall make the quit menu item live, and give it the usual keyboard accelarator. Add this import.
import javafx.scene.input.KeyCombination;
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.layout.VBox; import javafx.stage.Stage; import javafx.scene.input.KeyCombination; public class MenuSample extends Application { @Override public void start(Stage stage) { stage.setTitle("Menu Sample"); Scene scene = new Scene(new VBox(), 400, 400); MenuBar mbar = new MenuBar(); Menu fileMenu = new Menu("File"); //populate fileMenu MenuItem newItem = new MenuItem("New") ; MenuItem openItem = new MenuItem("Open...") ; MenuItem closeItem = new MenuItem("Close") ; MenuItem quitItem = new MenuItem("Quit") ; quitItem.setAccelerator(KeyCombination.keyCombination("Ctrl+X")); quitItem.setOnAction(e -> System.exit(0)); fileMenu.getItems().addAll(newItem, openItem, closeItem, quitItem); Menu editMenu = new Menu("Edit"); mbar.getMenus().addAll(fileMenu, editMenu); ( (VBox) scene.getRoot()).getChildren().addAll(mbar); stage.setScene(scene); stage.show(); } }
This app now quits via the menu or via the keyboard combination control-x.
Following this demo has shown you how to install menus in a window and how to make the menu items "live." Note that menu items are really just buttons. We used a lambda to write the listener for the quit menu item.