JavaFX |菜单栏和菜单
Menu是一个弹出菜单,其中包含多个菜单项,当用户单击菜单时会显示这些菜单项。用户可以选择菜单项,然后菜单进入隐藏状态。
MenuBar通常放置在包含多个菜单的屏幕顶部。 JavaFX MenuBar 通常是菜单栏的实现。
MenuBar 类的构造函数是:
- MenuBar() :创建一个新的空菜单栏。
- MenuBar(Menu… m) : 使用给定的菜单集创建一个新的菜单栏。
Menu 类的构造函数是:
- Menu() : 创建一个空菜单
- Menu(String s) : 创建一个以字符串为标签的菜单
- Menu(String s, Node n) :构造一个Menu,并用指定的文本设置显示文本,并将图形节点设置为给定的节点。
- Menu(String s, Node n, MenuItem... i) :构造一个Menu并设置显示文本与指定文本,图形节点到给定节点,并将给定项目插入到项目列表中。
常用方法:
method | explanation |
---|---|
getItems() | returns the items of the menu |
hide() | hide the menu |
show() | show the menu |
getMenus() | The menus to show within this MenuBar. |
isUseSystemMenuBar() | Gets the value of the property useSystemMenuBar |
setUseSystemMenuBar(boolean v) | Sets the value of the property useSystemMenuBar. |
setOnHidden(EventHandler v) | Sets the value of the property onHidden. |
setOnHiding(EventHandler v) | Sets the value of the property onHiding. |
setOnShowing(EventHandler v) | Sets the value of the property onShowing. |
setOnShown(EventHandler v | Sets the value of the property onShown. |
下面的程序说明了 MenuBar 和 Menu 类:
- 用于创建菜单栏并向其添加菜单以及向菜单添加菜单项的Java程序:该程序创建一个由名称mb指示的菜单栏。将创建一个名为m的菜单,并将 3 个菜单项m1 、 m2 、 m3添加到菜单m和菜单m将添加到菜单栏mb 。菜单栏将在场景内创建,而场景又将托管在舞台内。函数setTitle() 用于为舞台提供标题。然后创建一个 VBox,调用 addChildren() 方法将菜单栏附加到场景中。最后调用 show() 方法显示最终结果。
// Java program to create a menu bar and add // menu to it and also add menuitems to menu import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.*; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.control.*; import javafx.stage.Stage; import javafx.scene.control.Alert.AlertType; import java.time.LocalDate; public class MenuBar_1 extends Application { // launch the application public void start(Stage s) { // set title for the stage s.setTitle("creating MenuBar"); // create a menu Menu m = new Menu("Menu"); // create menuitems MenuItem m1 = new MenuItem("menu item 1"); MenuItem m2 = new MenuItem("menu item 2"); MenuItem m3 = new MenuItem("menu item 3"); // add menu items to menu m.getItems().add(m1); m.getItems().add(m2); m.getItems().add(m3); // create a menubar MenuBar mb = new MenuBar(); // add menu to menubar mb.getMenus().add(m); // create a VBox VBox vb = new VBox(mb); // create a scene Scene sc = new Scene(vb, 500, 300); // set the scene s.setScene(sc); s.show(); } public static void main(String args[]) { // launch the application launch(args); } }
输出:
- Java程序创建一个菜单栏并向其添加一个菜单,还将菜单项添加到菜单,还添加一个事件侦听器来处理事件:该程序创建一个由名称mb指示的菜单栏。将创建一个名为m的菜单,并将 3 个菜单项m1 、 m2 、 m3添加到菜单m和菜单m将添加到菜单栏mb 。菜单栏将在场景内创建,而场景又将托管在舞台内。函数setTitle() 用于为舞台提供标题。然后创建一个 VBox,调用 addChildren() 方法将菜单栏附加到场景中。最后调用 show() 方法显示最终结果。还将创建一个标签,显示选择了哪个菜单项。当用户单击菜单项时,将创建一个动作事件来处理该动作。
// Java program to create a menu bar and add menu to // it and also add menuitems to menu and also add // an event listener to handle the events import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.*; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.control.*; import javafx.stage.Stage; import javafx.scene.control.Alert.AlertType; import java.time.LocalDate; public class MenuBar_2 extends Application { // launch the application public void start(Stage s) { // set title for the stage s.setTitle("creating MenuBar"); // create a menu Menu m = new Menu("Menu"); // create menuitems MenuItem m1 = new MenuItem("menu item 1"); MenuItem m2 = new MenuItem("menu item 2"); MenuItem m3 = new MenuItem("menu item 3"); // add menu items to menu m.getItems().add(m1); m.getItems().add(m2); m.getItems().add(m3); // label to display events Label l = new Label("\t\t\t\t" + "no menu item selected"); // create events for menu items // action event EventHandler
event = new EventHandler () { public void handle(ActionEvent e) { l.setText("\t\t\t\t" + ((MenuItem)e.getSource()).getText() + " selected"); } }; // add event m1.setOnAction(event); m2.setOnAction(event); m3.setOnAction(event); // create a menubar MenuBar mb = new MenuBar(); // add menu to menubar mb.getMenus().add(m); // create a VBox VBox vb = new VBox(mb, l); // create a scene Scene sc = new Scene(vb, 500, 300); // set the scene s.setScene(sc); s.show(); } public static void main(String args[]) { // launch the application launch(args); } } 输出:
注意:以上程序可能无法在在线 IDE 中运行,请使用离线转换器。
参考:
- https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/Menu.html
- https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/MenuBar.html