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");
});

