JavaFX |带有示例的 ContextMenu
ContextMenu 是 JavaFX 库的一部分。 ContextMenu 可以与标签、文本字段等控件相关联。右键单击相关控件时会激活上下文菜单。它显示一个包含多个菜单项或子菜单的弹出窗口。
该类的构造函数是:
- ContextMenu() :创建一个新的空上下文菜单。
- ContextMenu(MenuItem… i) :创建一个包含菜单项的上下文菜单。
常用方法:
method | explanation |
---|---|
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 的使用:
- 创建上下文菜单并将其添加到标签的程序:将通过名称“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); } }
输出:
- 创建上下文菜单并将其添加到标签并将上下文菜单与窗口事件侦听器关联的程序:将创建一个名为 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