Using FXML to create a UI
import java.io.File; import java.io.FileInputStream; import java.util.ResourceBundle; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.MenuBar; import javafx.scene.input.InputEvent; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; import javafx.stage.Stage; public class Main extends Application { public static void main(String[] arguments) { Application.launch(Main.class, arguments); } @Override public void start(final Stage stage) throws Exception { FXMLLoader f = new FXMLLoader(); final Parent fxmlRoot = (Parent)f.load(new FileInputStream(new File("JavaFx2Menus.fxml"))); stage.setScene(new Scene(fxmlRoot)); stage.show(); } } <?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import javafx.scene.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <VBox id="vbox" prefHeight="400" prefWidth="800" xmlns:fx="http://javafx.com/fxml" fx:controller="MenuController"> <MenuBar fx:id="menuBar" onKeyPressed="#handleKeyInput"> <menus> <Menu text="File"> <items> <MenuItem text="New"/> <MenuItem text="Open"/> <MenuItem text="Save"/> <MenuItem text="Save As"/> <SeparatorMenuItem /> <MenuItem text="Exit"/> </items> </Menu> <Menu text="Edit"> <items> <MenuItem text="Copy"/> <MenuItem text="Cut"/> <MenuItem text="Paste"/> </items> </Menu> <Menu text="Help"> <items> <MenuItem text="Search" disable="true"/> <MenuItem text="Online Manual" visible="false"/> <SeparatorMenuItem /> <MenuItem text="About" onAction="#handleAboutAction"/> </items> </Menu> </menus> </MenuBar> </VBox> import java.util.ResourceBundle; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.MenuBar; import javafx.scene.input.InputEvent; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; public class MenuController implements Initializable { @FXML private MenuBar menuBar; /** * Handle action related to "About" menu item. * * @param event Event on "About" menu item. */ @FXML private void handleAboutAction(final ActionEvent event) { provideAboutFunctionality(); } /** * Handle action related to input (in this case specifically only responds to * keyboard event CTRL-A). * * @param event Input event. */ @FXML private void handleKeyInput(final InputEvent event) { if (event instanceof KeyEvent) { final KeyEvent keyEvent = (KeyEvent) event; if (keyEvent.isControlDown() && keyEvent.getCode() == KeyCode.A) { provideAboutFunctionality(); } } } /** * Perform functionality associated with "About" menu selection or CTRL-A. */ private void provideAboutFunctionality() { System.out.println("You clicked on About!"); } @Override public void initialize(java.net.URL arg0, ResourceBundle arg1) { menuBar.setFocusTraversable(true); } }