当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


JavaFX 类 ContextMenu用法及代码示例



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

该类的构造方法是:

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

常用方法:


方法 说明
getItems() 返回上下文菜单的项目
getOnAction() 返回属性OnAction的值
hide() 隐藏上下文菜单
setOnAction(EventHandler v) 设置属性onAction的值
show(Node a, double X, double Y) 在屏幕的指定位置显示上下文菜单

以下示例程序旨在说明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事件,该事件将处理上下文菜单的窗口事件,并通过标签“ label”显示上下文菜单的状态。窗口事件将使用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<WindowEvent> event = new EventHandler<WindowEvent>() { 
                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



相关用法


注:本文由纯净天空筛选整理自andrew1234大神的英文原创作品 JavaFX | ContextMenu with examples。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。