openplanning

Hướng dẫn và ví dụ JavaFX MenuButton và SplitMenuButton

Xem thêm các chuyên mục:

Nhóm phát triển của chúng tôi vừa ra mắt website langlearning.net học tiếng Anh, Nga, Đức, Pháp, Việt, Trung, Hàn, Nhật, ... miễn phí cho tất cả mọi người.
Là một website được viết trên công nghệ web Flutter vì vậy hỗ trợ rất tốt cho người học, kể cả những người học khó tính nhất.
Hiện tại website đang tiếp tục được cập nhập nội dung cho phong phú và đầy đủ hơn. Mong các bạn nghé thăm và ủng hộ website mới của chúng tôi.
Hãy theo dõi chúng tôi trên Fanpage để nhận được thông báo mỗi khi có bài viết mới. Facebook

1- JavaFX MenuButton & SplitMenuButton

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 vs 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.

2- Ví dụ với JavaFX 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);
  }

}

3- Ví dụ với JavaFX SplitMenuButton

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

}

Xem thêm các chuyên mục: