Hướng dẫn sử dụng JavaFX MenuButton và SplitMenuButton
Xem thêm các chuyên mục:
MenuButton là một nút mà khi nhấn vào, nó không thực hiện bất kỳ hành động khác hơn so với hiện/ẩn một menu chứa các menuItem. Vì lý do này, không giống như JavaFX Button bình thường, không có thuộc tính hành động mà bạn có thể định nghĩa.
MenuButton

Khi người dùng click vào MenuButton, một menu sẽ hiển thị ra, các Item trong đó có thể là kiểu MenuItem, CheckMenuItem, RadioMenuItem hoặc SeparatorMenuItem. Và bạn có thể sử lý các sự kiện khi người dùng click vào các item, về cơ bản MenuButton không khác biệt gì với một Menu thông thường.
SplitMenuButton

MenuButton so với SplitMenuButton.

SplitMenuButton rất giống với một MenuButton, và nó cũng giống với một Button, nó cho phép bạn gắn một hành động khi người dùng click vào bên trái. Hãy chú ý SplitMenuButton phân chia làm 2 phần bên trái và bên phải. Khi người dùng click vào bên trái nó hành động giống một Button, khi người dùng click vào bên phải nó hành động giống một MenuButton.

MenuButtonDem.java
package org.o7planning.javafx.menubutton; import java.io.InputStream; import javafx.application.Application; import javafx.geometry.Insets; 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.FlowPane; import javafx.stage.Stage; public class MenuButtonDemo extends Application { // resourcePath: "/org/o7planning/javafx/icon/flag-vi.png" private ImageView getIcon(String resourcePath) { InputStream input // = this.getClass().getResourceAsStream(resourcePath); Image image = new Image(input); return new ImageView(image); } @Override public void start(Stage primaryStage) throws Exception { ImageView imageViewVI = this.getIcon("/org/o7planning/javafx/icon/flag-vi.png"); ImageView imageViewEN = this.getIcon("/org/o7planning/javafx/icon/flag-en.png"); ImageView imageViewIN = this.getIcon("/org/o7planning/javafx/icon/flag-in.png"); // Tạo các MenuItem. MenuItem menuItemVI = new MenuItem("Vietnamese", imageViewVI); MenuItem menuItemEN = new MenuItem("English", imageViewEN); MenuItem menuItemIN = new MenuItem("India", imageViewIN); ImageView imageViewLang = this.getIcon("/org/o7planning/javafx/icon/language.png"); // Tạo MenuButton với text, Icon và 3 Items MenuButton menuButton = new MenuButton("Languages", imageViewLang, // menuItemVI, menuItemEN, menuItemIN); FlowPane root = new FlowPane(); root.setPadding(new Insets(10)); root.setVgap(5); root.setHgap(5); root.getChildren().addAll(menuButton); Scene scene = new Scene(root, 320, 150); primaryStage.setTitle("JavaFX MenuButton (o7planning.org)"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { Application.launch(args); } }


SplitMenuButtonDemo.java
package org.o7planning.javafx.menubutton; import java.io.InputStream; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.MenuItem; import javafx.scene.control.SplitMenuButton; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.FlowPane; import javafx.stage.Stage; public class SplitMenuButtonDemo extends Application { private int count = 1; // resourcePath: "/org/o7planning/javafx/icon/flag-vi.png" private ImageView getIcon(String resourcePath) { InputStream input // = this.getClass().getResourceAsStream(resourcePath); Image image = new Image(input); return new ImageView(image); } @Override public void start(Stage primaryStage) throws Exception { Label label = new Label(); ImageView imageViewVI = this.getIcon("/org/o7planning/javafx/icon/flag-vi.png"); ImageView imageViewEN = this.getIcon("/org/o7planning/javafx/icon/flag-en.png"); ImageView imageViewIN = this.getIcon("/org/o7planning/javafx/icon/flag-in.png"); // Tạo các MenuItem. MenuItem menuItemVI = new MenuItem("Vietnamese", imageViewVI); MenuItem menuItemEN = new MenuItem("English", imageViewEN); MenuItem menuItemIN = new MenuItem("India", imageViewIN); ImageView imageViewLang = this.getIcon("/org/o7planning/javafx/icon/language.png"); // Tạo MenuButton với 3 Items SplitMenuButton splitMenuButton = new SplitMenuButton(menuItemVI, menuItemEN, menuItemIN); splitMenuButton.setText("Language"); splitMenuButton.setGraphic(imageViewLang); // Sử lý khi người dùng click vào phần bên trái của SplitMenuButton. splitMenuButton.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { label.setText("Clicked " + count++); } }); FlowPane root = new FlowPane(); root.setPadding(new Insets(10)); root.setVgap(5); root.setHgap(5); root.getChildren().addAll(splitMenuButton, label); Scene scene = new Scene(root, 320, 150); primaryStage.setTitle("JavaFX SplitMenuButton (o7planning.org)"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { Application.launch(args); } }