📜  JavaFX |带有示例的 ContextMenu

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

JavaFX |带有示例的 ContextMenu


ContextMenu 是 JavaFX 库的一部分。 ContextMenu 可以与标签、文本字段等控件相关联。右键单击相关控件时会激活上下文菜单。它显示一个包含多个菜单项或子菜单的弹出窗口。

该类的构造函数是:

  1. ContextMenu() :创建一个新的空上下文菜单。
  2. ContextMenu(MenuItem… i) :创建一个包含菜单项的上下文菜单。

常用方法:

methodexplanation
getItems()returns the items of the context menu
getOnAction()returns the value of the property OnAction
hide()hides the context menu
setOnAction(EventHandler v)sets the value of the property onAction
show(Node a, double X, double Y)displays the context menu at a specified position of the screen

下面的程序说明了 ContextMenu 的使用:

  1. 创建上下文菜单并将其添加到标签的程序:将通过名称“contextMenu”创建一个 ContextMenu,并将 3 个菜单项:menuItem1、menuItem2、menuItem3 添加到菜单 contextMenu 中,并且菜单 contextMenu 将与标签“label”相关联'。标签将在场景内创建,而场景又将托管在舞台内。函数setTitle() 用于为舞台提供标题。然后创建一个 VBox,调用 addChildren() 方法将菜单栏附加到场景中。最后调用 show() 方法显示最终结果。
    // Program to create a context menu and add it to label
    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.control.*;
    import javafx.scene.layout.*;
    import javafx.event.ActionEvent;
    import javafx.event.EventHandler;
    import javafx.collections.*;
    import javafx.stage.Stage;
    import javafx.scene.text.Text.*;
    import javafx.scene.paint.*;
    import javafx.scene.text.*;
    public class contextMenu_1 extends Application {
        // labels
        Label l;
      
        // launch the application
        public void start(Stage stage)
        {
            // set title for the stage
            stage.setTitle("creating contextMenu ");
      
            // create a label
            Label label1 = new Label("This is a ContextMenu example ");
      
            // create a menu
            ContextMenu contextMenu = new ContextMenu();
      
            // create menuitems
            MenuItem menuItem1 = new MenuItem("menu item 1");
            MenuItem menuItem2 = new MenuItem("menu item 2");
            MenuItem menuItem3 = new MenuItem("menu item 3");
      
            // add menu items to menu
            contextMenu.getItems().add(menuItem1);
            contextMenu.getItems().add(menuItem2);
            contextMenu.getItems().add(menuItem3);
      
            // create a tilepane
            TilePane tilePane = new TilePane(label1);
      
            // setContextMenu to label
            label1.setContextMenu(contextMenu);
      
            // create a scene
            Scene sc = new Scene(tilePane, 200, 200);
      
            // set the scene
            stage.setScene(sc);
      
            stage.show();
        }
      
        public static void main(String args[])
        {
            // launch the application
            launch(args);
        }
    }
    

    输出:

  2. 创建上下文菜单并将其添加到标签并将上下文菜单与窗口事件侦听器关联的程序:将创建一个名为 contextMenu 的 Contextmenu,并将 3 个菜单项 menuItem1、menuItem2、menuItem3 添加到菜单 contextMenu 中,并将 contextMenu 关联起来带有标签 l。标签将在场景内创建,而场景又将托管在舞台内。函数setTitle() 用于为舞台提供标题。然后创建一个 VBox,调用 addChildren() 方法将菜单栏附加到场景中。最后调用 show() 方法显示最终结果。将创建一个 Window 事件,该事件将处理上下文菜单的窗口事件,并将通过标签“标签”显示上下文菜单的状态。窗口事件将使用 setOnHiding() 和 setOnShowing() 函数与标签相关联。
    // Program to create a context menu and add it to label
    // and associate the context menu with window event listener
    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.control.*;
    import javafx.scene.layout.*;
    import javafx.stage.WindowEvent;
    import javafx.event.EventHandler;
    import javafx.collections.*;
    import javafx.stage.Stage;
    import javafx.scene.text.Text.*;
    import javafx.scene.paint.*;
    import javafx.scene.text.*;
    public class contextMenu extends Application {
        // labels
        Label label;
      
        // launch the application
        public void start(Stage stage)
        {
            // set title for the stage
            stage.setTitle("creating contextMenu ");
      
            // create a label
            Label label1 = new Label("This is a ContextMenu example ");
      
            // create a menu
            ContextMenu contextMenu = new ContextMenu();
      
            // create menuitems
            MenuItem menuItem1 = new MenuItem("menu item 1");
            MenuItem menuItem2 = new MenuItem("menu item 2");
            MenuItem menuItem3 = new MenuItem("menu item 3");
      
            // add menu items to menu
            contextMenu.getItems().add(menuItem1);
            contextMenu.getItems().add(menuItem2);
            contextMenu.getItems().add(menuItem3);
      
            // label to display events
            Label label = new Label("context menu hidden");
      
            // create window event
            EventHandler event = new EventHandler() {
                public void handle(WindowEvent e)
                {
                    if (contextMenu.isShowing())
                        label.setText("context menu showing");
                    else
                        label.setText("context menu hidden");
                }
            };
      
            // add event
            contextMenu.setOnShowing(event);
            contextMenu.setOnHiding(event);
      
            // create a tilepane
            TilePane tilePane = new TilePane(label1);
      
            tilePane.getChildren().add(label);
      
            // setContextMenu to label
            label.setContextMenu(contextMenu);
      
            // create a scene
            Scene sc = new Scene(tilePane, 200, 200);
      
            // set the scene
            stage.setScene(sc);
      
            stage.show();
        }
      
        public static void main(String args[])
        {
            // launch the application
            launch(args);
        }
    }
    

    输出:

注意:以上程序可能无法在在线编译器中运行,请使用离线 IDE。

参考: https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/ContextMenu.html