JavaFX菜单按钮
JavaFX MenuButton控件可以显示用户可以选择的菜单选项列表。 JavaFX MenuButton可以显示或者隐藏菜单项。菜单项通常在菜单按钮中单击一个小箭头按钮时显示。 JavaFX MenuButton控件由类javafx.scene.control.MenuButton
表示。
创建一个菜单按钮
我们可以通过创建MenuButton
类的实例来创建JavaFX MenuButton。这是一个JavaFXMenuButton
实例化示例:
MenuItem menuItem1 = new MenuItem("Option 1"); MenuItem menuItem2 = new MenuItem("Option 2"); MenuItem menuItem3 = new MenuItem("Option 3"); MenuButton menuButton = new MenuButton("Options", null, menuItem1, menuItem2, menuItem3);
首先创建3个" MenuItem"实例,每个实例具有不同的文本。然后创建一个MenuButton实例,将按钮文本,图形图标(null)和3个MenuItem实例作为参数传递给MenuButton构造函数。
第二个" MenuButton"构造函数参数是" Node",它用作图形图标,显示在MenuButton文本旁边。我们可以使用ImageView控件在MenuButton文本旁边显示图像。只需创建一个ImageView实例,并将对该实例的引用传递给MenuButton构造函数,而不是null即可。这是一个例子:
MenuItem menuItem1 = new MenuItem("Option 1"); MenuItem menuItem2 = new MenuItem("Option 2"); MenuItem menuItem3 = new MenuItem("Option 3"); FileInputStream input = new FileInputStream("resources/images/iconmonstr-menu-5-32.png"); Image image = new Image(input); ImageView imageView = new ImageView(image); MenuButton menuButton = new MenuButton("Options", imageView, menuItem1, menuItem2, menuItem3);
将菜单按钮添加到场景图
要使" MenuButton"可见,必须将其添加到JavaFX场景图中。这意味着将其添加到"场景",或者作为添加到"场景"对象的布局的子级。
这是一个将JavaFXMenuButton
添加到场景图的示例:
package com.Hyman.javafx.controls; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.MenuButton; import javafx.scene.control.MenuItem; import javafx.scene.layout.HBox; import javafx.stage.Stage; import java.io.FileInputStream; public class MenuButtonExperiments extends Application { @Override public void start(Stage primaryStage) throws Exception { primaryStage.setTitle("ImageView Experiment 1"); MenuItem menuItem1 = new MenuItem("Option 1"); MenuItem menuItem2 = new MenuItem("Option 2"); MenuItem menuItem3 = new MenuItem("Option 3"); MenuButton menuButton = new MenuButton("Options", null, menuItem1, menuItem2, menuItem3); HBox hbox = new HBox(menuButton); Scene scene = new Scene(hbox, 200, 100); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { Application.launch(args); } }
这是上述示例生成的应用程序的外观:
这是将相同的示例添加到MenuButton
中的图形图标后的样子:
package com.Hyman.javafx.controls; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.MenuButton; import javafx.scene.control.MenuItem; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.HBox; import javafx.stage.Stage; import java.io.FileInputStream; public class MenuButtonExperiments extends Application { @Override public void start(Stage primaryStage) throws Exception { primaryStage.setTitle("ImageView Experiment 1"); MenuItem menuItem1 = new MenuItem("Option 1"); MenuItem menuItem2 = new MenuItem("Option 2"); MenuItem menuItem3 = new MenuItem("Option 3"); FileInputStream input = new FileInputStream("resources/images/iconmonstr-menu-5-32.png"); Image image = new Image(input); ImageView imageView = new ImageView(image); MenuButton menuButton = new MenuButton("Options", imageView, menuItem1, menuItem2, menuItem3); HBox hbox = new HBox(menuButton); Scene scene = new Scene(hbox, 200, 160); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { Application.launch(args); } }
这是上述示例生成的应用程序的外观:
响应菜单项选择
要在用户选择菜单项时做出响应,请将" on action"事件侦听器添加到相应的" MenuItem"对象。这是一个示例,向我们展示如何将动作事件侦听器添加到MenuItem
对象:
MenuItem menuItem3 = new MenuItem("Option 3"); menuItem3.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { System.out.println("Option 3 selected"); } });
我们也可以使用Java Lambda表达式代替EventHandler接口的匿名实现。看起来是这样的:
menuItem3.setOnAction(event -> { System.out.println("Option 3 selected via Lambda"); });