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.