JavaFX菜单栏是一种用于构建用户界面的强大工具,它可以帮助开发人员快速创建复杂的应用程序。它提供了一种方便的方法来创建菜单,菜单项,子菜单,快捷键和其他功能。
JavaFX菜单栏可以使用JavaFX API中的MenuBar类来创建。MenuBar类是一个容器,可以包含多个Menu对象。每个Menu对象都有一个文本标签,并且可以包含多个MenuItem对象。
使用JavaFX API中的MenuItem类可以创建不同类型的菜单项,如CheckBoxMenuItem、RadioButtonMenuItem、SeparatorMenuItem、CustomMenuItem、HyperlinkMenuItem等。这些都是特定的子类,它们都有特定的功能。
// 创建一个新的 MenuBar 实例 MenuBar menuBar = new MenuBar(); // 创建一个新的 Menu 实例 Menu menu = new Menu("File"); // 创建一个新的 MenuItem 实例 MenuItem menuItem = new MenuItem("Open"); // 把 menu 添加到 menuBar 中 menuBar.getMenus().add(menu); // 把 menuItem 添加到 menu 中 menu.getItems().add(menuItem);
此外,还可以使用JavaFX API中的ContextMenu类来创建上下文菜单。上下文菜单是在特定位置显示时才会出现的特殊菜单,通常会附带相关信息或者操作选项。
// 创建一个新的 ContextMenu 实例 ContextMenu contextMenu = new ContextMenu(); // 创建一个新的 MenuItem 实例 MenuItem contextmenuitem = new MenuItem("Copy"); // 把 contextmenuitem 添加到 contextmenu 中 contextmenu.getItems().add(contextmenuitem);
此外,还可以使用JavaFX API中的Toolbar 类来创建工具栏。工具栏是一行图标或者控件,用于快速执行常用命令或者操作。
// 创建一个新 Toolbar 的实例 Toolbar toolbar = new Toolbar(); // 这里你可以往 toolbar 里面添加你想要显示在工具栏上面图标或者控件 toolbar.getItems().addAll(button1, button2, button3);
总之,JavaFX 菜单栏是开发人员在开发 JavaFX 用户界面时不可或缺的重要工具之一。它能够帮助开发人员快速而有效地创建出复杂而引人注目的应用界面。
菜单是桌面应用程序选择选项的标准方法。
菜单和菜单项可以具有用于选择选项的键组合,称为键盘快捷键。
我们必须创建一个菜单栏 javafx.scene.control.MenuBar
对象来保存 javafx.scene.control.Menu
对象。
菜单对象可以包含 Menu 和 javafx.scene.control.MenuItem 对象。菜单可以包含其他菜单作为子菜单。MenuItems 是 Menu 对象内的子选项。
以下代码显示如何创建菜单栏并添加菜单和菜单项。
菜单类是 MenuItem 的子类,它有一个 getItems()
。add()
方法,它能够添加例如其他 Menu 和 MenuItem 实例。
import javafx.application.Application; import javafx.application.Platform; import javafx.scene.Scene; import javafx.scene.control.CheckMenuItem; import javafx.scene.control.Menu; import javafx.scene.control.MenuBar; import javafx.scene.control.MenuItem; import javafx.scene.control.RadioMenuItem; import javafx.scene.control.SeparatorMenuItem; import javafx.scene.control.ToggleGroup; import javafx.scene.layout.BorderPane; import javafx.scene.paint.Color; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage primaryStage) { BorderPane root = new BorderPane(); Scene scene = new Scene(root, 300, 250, Color.WHITE); MenuBar menuBar = new MenuBar(); menuBar.prefWidthProperty().bind(primaryStage.widthProperty()); root.setTop(menuBar); // File menu - new, save, exit Menu fileMenu = new Menu("File"); MenuItem newMenuItem = new MenuItem("New"); MenuItem saveMenuItem = new MenuItem("Save"); MenuItem exitMenuItem = new MenuItem("Exit"); exitMenuItem.setOnAction(actionEvent -> Platform.exit()); fileMenu.getItems().addAll(newMenuItem, saveMenuItem, new SeparatorMenuItem(), exitMenuItem); Menu webMenu = new Menu("Web"); CheckMenuItem htmlMenuItem = new CheckMenuItem("HTML"); htmlMenuItem.setSelected(true); webMenu.getItems().add(htmlMenuItem); CheckMenuItem cssMenuItem = new CheckMenuItem("CSS"); cssMenuItem.setSelected(true); webMenu.getItems().add(cssMenuItem); Menu sqlMenu = new Menu("SQL"); ToggleGroup tGroup = new ToggleGroup(); RadioMenuItem mysqlItem = new RadioMenuItem("MySQL"); mysqlItem.setToggleGroup(tGroup); RadioMenuItem oracleItem = new RadioMenuItem("Oracle"); oracleItem.setToggleGroup(tGroup); oracleItem.setSelected(true); sqlMenu.getItems().addAll(mysqlItem, oracleItem, new SeparatorMenuItem()); Menu tutorialManeu = new Menu("Tutorial"); tutorialManeu.getItems().addAll( new CheckMenuItem("Java"), new CheckMenuItem("JavaFX"), new CheckMenuItem("Swing")); sqlMenu.getItems().add(tutorialManeu); menuBar.getMenus().addAll(fileMenu, webMenu, sqlMenu); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
上面的代码生成以下结果。
要将选中的选项或单选按钮添加到菜单,我们可以使用以下选项 MenuItem 类的子类。
以下列表显示了可用作菜单选项的可用 MenuItem 子类。
CheckMenuItem 菜单项类似于复选框控件,允许用户选择项目。
RadioMenuItem 菜单项类似于 RadioButton 控件,允许用户从项目组中仅选择一个项目。
要创建自定义菜单项,我们可以使用 CustomMenuItem 类。
SeparatorMenuItem 是 CustomMenuItem 类型的派生类显示用于分隔菜单项的视线。
使用 CustomMenuItem 将 Slider 添加到 MenuItem
import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.CustomMenuItem; import javafx.scene.control.Menu; import javafx.scene.control.MenuBar; import javafx.scene.control.MenuItem; import javafx.scene.control.SeparatorMenuItem; import javafx.scene.control.Slider; import javafx.scene.paint.Color; import javafx.stage.Stage; public class Main extends Application { public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage primaryStage) { primaryStage.setTitle("Menus"); Group root = new Group(); Scene scene = new Scene(root, 300, 250, Color.WHITE); MenuBar menuBar = new MenuBar(); Menu menu = new Menu("File"); menu.getItems().add(new MenuItem("New")); menu.getItems().add(new MenuItem("Save")); menu.getItems().add(new SeparatorMenuItem()); menu.getItems().add(new MenuItem("Exit")); CustomMenuItem customMenuItem = new CustomMenuItem(new Slider()); customMenuItem.setHideOnClick(false); menu.getItems().add(customMenuItem); menuBar.getMenus().add(menu); menuBar.prefWidthProperty().bind(primaryStage.widthProperty()); root.getChildren().add(menuBar); primaryStage.setScene(scene); primaryStage.show(); } }
上面的代码生成以下结果。
要向菜单项添加事件处理程序,我们可以使用 setOnAction()
方法,它接收一个类型为
的功能接口,它是在选择菜单项时调用的处理程序代码。EventHandler <ActionEvent
>
import javafx.application.Application; import javafx.application.Platform; import javafx.scene.Scene; import javafx.scene.control.Menu; import javafx.scene.control.MenuBar; import javafx.scene.control.MenuItem; import javafx.scene.layout.BorderPane; import javafx.scene.paint.Color; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage primaryStage) { BorderPane root = new BorderPane(); Scene scene = new Scene(root, 300, 250, Color.WHITE); MenuBar menuBar = new MenuBar(); menuBar.prefWidthProperty().bind(primaryStage.widthProperty()); root.setTop(menuBar); Menu fileMenu = new Menu("File"); MenuItem exitMenuItem = new MenuItem("Exit"); fileMenu.getItems().add(exitMenuItem); exitMenuItem.setOnAction(actionEvent -> Platform.exit()); menuBar.getMenus().addAll(fileMenu); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
上面的代码生成以下结果。
标准菜单通常具有键盘助记符,以在不使用鼠标的情况下选择菜单项。
用户可以点击 Alt
键和带下划线 _
的字母来激活菜单,然后使用箭头键导航。
要向菜单添加键助记符,我们使用String值和调用构造函数在菜单或菜单项的文本中,在所选字母前面放置一个下划线字符。
然后我们将 true
传递给setMnemonicParsing(true)
方法。
以下代码创建一个使用字母“F"作为助记符的文件菜单。
Menu fileMenu = new Menu("_File"); fileMenu.setMnemonicParsing(true);
完整的源代码
import javafx.application.Application; import javafx.application.Platform; import javafx.scene.Scene; import javafx.scene.control.Menu; import javafx.scene.control.MenuBar; import javafx.scene.control.MenuItem; import javafx.scene.layout.BorderPane; import javafx.scene.paint.Color; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage primaryStage) { BorderPane root = new BorderPane(); Scene scene = new Scene(root, 300, 250, Color.WHITE); MenuBar menuBar = new MenuBar(); menuBar.prefWidthProperty().bind(primaryStage.widthProperty()); root.setTop(menuBar); Menu fileMenu = new Menu("_File"); fileMenu.setMnemonicParsing(true); MenuItem exitMenuItem = new MenuItem("Exit"); fileMenu.getItems().add(exitMenuItem); exitMenuItem.setOnAction(actionEvent -> Platform.exit()); menuBar.getMenus().addAll(fileMenu); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
上面的代码生成以下结果。
键组合是用于选择菜单选项的键击的组合。键组合称为键盘快捷键。
例如,在 Windows平台上,Ctrl + S 的组合键可以保存文件。在Mac OS平台上,组合键为 Command + S.
Ctrl,Command,Alt,Shift 和 Meta 等键称为修饰键。
通常,修饰符与单个字母组合使用。
要创建键组合,使用 KeyCode 组合对象并传递击键和修饰符。
以下代码创建 (Ctrl或Meta)+ S 的键代码组合。
MenuItem saveItem = new MenuItem("_Save"); saveItem.setMnemonicParsing(true); saveItem.setAccelerator(new KeyCodeCombination(KeyCode.S, KeyCombination.SHORTCUT_DOWN));
代码使用 KeyCombination.SHORTCUT_DOWN 值作为键修饰符而不是 CONTROL_DOWN 或 META_DOWN。 SHORTCUT_DOWN 的值将启用应用程序跨平台。
值 CONTROL_DOWN和META_DOWN 是系统依赖于 Windows 和 MacOS 平台,但 SHORTCUT_DOWN 适用于所有平台。
上下文菜单是当用户右键单击鼠标按钮时显示的弹出菜单。
要创建上下文菜单,使用 ContextMenu
类。ContextMenu 菜单有一个 getItems()
。add()
方法来添加菜单项。
以下代码显示了使用菜单项 (exitItem) 实例化的上下文菜单:
ContextMenu contextFileMenu = new ContextMenu(exitItem);
要响应鼠标右键单击,请添加事件处理程序以侦听右键单击事件调用上下文菜单的show()
方法。
以下代码设置了一个事件处理程序来显示和隐藏上下文菜单基于右或左鼠标点击。
hide()
方法是通过主鼠标单击(左键单击)以删除上下文菜单。
primaryStage.addEventHandler(MouseEvent.MOUSE_CLICKED, (MouseEvent me) -> { if (me.getButton() == MouseButton.SECONDARY || me.isControlDown()) { contextFileMenu.show(root, me.getScreenX(), me.getScreenY()); } else { contextFileMenu.hide(); } });
Java endsWith() 方法Java String类endsWith() 方法用于测试字符串是否以指定的后缀结束。语法public boolean endsWith(String s...
Java 实例 - 字符串分割 Java 实例以下实例使用了 split(string)方法通过指定分隔符将字符串分割为数组://JavaStringSplitEmp.j...
Java线程教程 - Java多线程以下代码显示了如何在程序中运行多线程。public class Main {public static void main(String[] args)...
Java regionMatches() 方法JavaString类regionMatches() 方法用于检测两个字符串在一个区域内是否相等。语法public boolean regi...
JavaFX教程 -JavaFX折线图折线图,一种双轴图表,显示了特定时间间隔内数据的动态。对于双轴图表,我们可以定义一系列数据XYChar...