📜  JavaFX |菜单栏和菜单

📅  最后修改于: 2022-05-13 01:55:16.173000             🧑  作者: Mango

JavaFX |菜单栏和菜单

Menu是一个弹出菜单,其中包含多个菜单项,当用户单击菜单时会显示这些菜单项。用户可以选择菜单项,然后菜单进入隐藏状态。

MenuBar通常放置在包含多个菜单的屏幕顶部。 JavaFX MenuBar 通常是菜单栏的实现。

MenuBar 类的构造函数是:

  1. MenuBar() :创建一个新的空菜单栏。
  2. MenuBar(Menu… m) : 使用给定的菜单集创建一个新的菜单栏。

Menu 类的构造函数是:

  1. Menu() : 创建一个空菜单
  2. Menu(String s) : 创建一个以字符串为标签的菜单
  3. Menu(String s, Node n) :构造一个Menu,并用指定的文本设置显示文本,并将图形节点设置为给定的节点。
  4. Menu(String s, Node n, MenuItem... i) :构造一个Menu并设置显示文本与指定文本,图形节点到给定节点,并将给定项目插入到项目列表中。

常用方法:

methodexplanation
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 vSets the value of the property onShown.

下面的程序说明了 MenuBar 和 Menu 类:

  1. 用于创建菜单栏并向其添加菜单以及向菜单添加菜单项的Java程序:该程序创建一个由名称mb指示的菜单栏。将创建一个名为m的菜单,并将 3 个菜单项m1m2m3添加到菜单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);
        }
    }
    

    输出

  2. Java程序创建一个菜单栏并向其添加一个菜单,还将菜单项添加到菜单,还添加一个事件侦听器来处理事件:该程序创建一个由名称mb指示的菜单栏。将创建一个名为m的菜单,并将 3 个菜单项m1m2m3添加到菜单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