當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。