Руководство JavaFX MenuButton и SplitMenuButton

1- JavaFX MenuButton & SplitMenuButton

MenuButton это кнопка, когда мы на нее нажимаем, она не выполняет никаких других действий чем  более показать / скрыть меню, которая содержит MenuItem. По этой причине, не похоже на обычный  JavaFX Button, не имеет никаких атрибутов действий, которые можно определить.

MenuButton

Когда пользователь нажимает на кнопку MenuButton, отображается меню, Item  которого могут быть вида  MenuItem,  CheckMenuItem, RadioMenuItem  или SeparatorMenuItem. И вы можете обрабатывать события, когда пользователь нажимает  на item. в основном MenuButton не отличается от обычного Menu.

SplitMenuButton

MenuButton по сравнению с SplitMenuButton.
 

SplitMenuButton очень похож на   MenuButton, и так же похож на  Button - это позволяет вам прикреплять действие, когда пользователь нажимает кнопку на левой стороне. Заметьте, что  SplitMenuButton делится на две части слева и справа. Когда пользователь нажимает на левой стороне он действует как Button, когда пользователь нажимает кнопку на правой стороне, он действует как  MenuButton

2- Пример с 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");

       // Create MenuItems
       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");

       // Create a MenuButton with Text & Icon & 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- Пример с 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");

        // Create MenuItems
        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");

        // Create a MenuButton with 3 Items
        SplitMenuButton splitMenuButton = new SplitMenuButton(menuItemVI, menuItemEN, menuItemIN);

        splitMenuButton.setText("Language");
        splitMenuButton.setGraphic(imageViewLang);

        // Handling when the user clicks on the left side of 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);
    }

}