All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.panteleyev.fx.MenuFactory Maven / Gradle / Ivy

The newest version!
/*
 Copyright © 2020-2024 Petr Panteleyev 
 SPDX-License-Identifier: BSD-2-Clause
 */
package org.panteleyev.fx;

import javafx.beans.binding.BooleanBinding;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Node;
import javafx.scene.control.CheckMenuItem;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.input.KeyCombination;

import java.util.Arrays;
import java.util.Objects;

/**
 * This class provides convenience methods to create menus, menu items, etc.
 */
public final class MenuFactory {
    private MenuFactory() {
    }

    /**
     * Creates new menu item.
     *
     * @param text   menu item text
     * @param action menu item action
     * @return menu item
     */
    public static MenuItem menuItem(String text, EventHandler action) {
        var menuItem = new MenuItem(text);
        menuItem.setOnAction(action);
        return menuItem;
    }

    /**
     * Creates new menu item.
     *
     * @param text   menu item text
     * @param node   menu item node
     * @param action menu item action
     * @return menu item
     */
    public static MenuItem menuItem(String text, Node node, EventHandler action) {
        var menuItem = new MenuItem(text, node);
        menuItem.setOnAction(action);
        return menuItem;
    }

    /**
     * Creates new menu item.
     *
     * @param text           menu item text
     * @param keyCombination menu item accelerator
     * @param action         menu item action
     * @return menu item
     */
    public static MenuItem menuItem(String text, KeyCombination keyCombination, EventHandler action) {
        var menuItem = menuItem(text, action);
        menuItem.setAccelerator(keyCombination);
        return menuItem;
    }

    /**
     * Creates new menu item.
     *
     * @param text           menu item text
     * @param node           menu item node
     * @param keyCombination menu item accelerator
     * @param action         menu item action
     * @return menu item
     */
    public static MenuItem menuItem(String text, Node node, KeyCombination keyCombination,
                                    EventHandler action) {
        var menuItem = menuItem(text, node, action);
        menuItem.setAccelerator(keyCombination);
        return menuItem;
    }

    /**
     * Creates new menu item.
     *
     * @param text           menu item text
     * @param action         menu item action
     * @param disableBinding boolean binding to disable menu item
     * @return menu item
     */
    public static MenuItem menuItem(String text, EventHandler action, BooleanBinding disableBinding) {
        var menuItem = menuItem(text, action);
        menuItem.disableProperty().bind(disableBinding);
        return menuItem;
    }

    /**
     * Creates new menu item.
     *
     * @param text           menu item text
     * @param node           menu item node
     * @param action         menu item action
     * @param disableBinding boolean binding to disable menu item
     * @return menu item
     */
    public static MenuItem menuItem(String text, Node node, EventHandler action,
                                    BooleanBinding disableBinding) {
        var menuItem = menuItem(text, node, action);
        menuItem.disableProperty().bind(disableBinding);
        return menuItem;
    }

    /**
     * Creates new menu item.
     *
     * @param text           menu item text
     * @param keyCombination menu item accelerator
     * @param action         menu item action
     * @param disableBinding boolean binding to disable menu item
     * @return menu item
     */
    public static MenuItem menuItem(String text,
                                    KeyCombination keyCombination,
                                    EventHandler action,
                                    BooleanBinding disableBinding) {
        var menuItem = menuItem(text, keyCombination, action);
        menuItem.disableProperty().bind(disableBinding);
        return menuItem;
    }

    /**
     * Creates new menu item.
     *
     * @param text           menu item text
     * @param node           menu item node
     * @param keyCombination menu item accelerator
     * @param action         menu item action
     * @param disableBinding boolean binding to disable menu item
     * @return menu item
     */
    public static MenuItem menuItem(String text,
                                    Node node,
                                    KeyCombination keyCombination,
                                    EventHandler action,
                                    BooleanBinding disableBinding) {
        var menuItem = menuItem(text, node, keyCombination, action);
        menuItem.disableProperty().bind(disableBinding);
        return menuItem;
    }

    /**
     * Creates new check menu item.
     *
     * @param text     menu item text
     * @param selected initial selected state
     * @return menu item
     */
    public static CheckMenuItem checkMenuItem(String text, boolean selected) {
        var menuItem = new CheckMenuItem(text);
        menuItem.setSelected(selected);
        return menuItem;
    }

    /**
     * Creates new check menu item.
     *
     * @param text     menu item text
     * @param selected initial selected state
     * @param action   menu item action
     * @return menu item
     */
    public static CheckMenuItem checkMenuItem(String text, boolean selected, EventHandler action) {
        var menuItem = new CheckMenuItem(text);
        menuItem.setSelected(selected);
        menuItem.setOnAction(action);
        return menuItem;
    }

    /**
     * Creates new check menu item.
     *
     * @param text           menu item text
     * @param selected       initial selected state
     * @param keyCombination menu item accelerator
     * @return menu item
     */
    public static CheckMenuItem checkMenuItem(String text, boolean selected, KeyCombination keyCombination) {
        var menuItem = new CheckMenuItem(text);
        menuItem.setSelected(selected);
        menuItem.setAccelerator(keyCombination);
        return menuItem;
    }

    /**
     * Creates new check menu item.
     *
     * @param text           menu item text
     * @param selected       initial selected state
     * @param keyCombination menu item accelerator
     * @param action         menu item action
     * @return menu item
     */
    public static CheckMenuItem checkMenuItem(String text,
                                              boolean selected,
                                              KeyCombination keyCombination,
                                              EventHandler action) {
        var menuItem = new CheckMenuItem(text);
        menuItem.setSelected(selected);
        menuItem.setAccelerator(keyCombination);
        menuItem.setOnAction(action);
        return menuItem;
    }

    /**
     * Creates new menu.
     *
     * @param text  menu text
     * @param items menu items
     * @return menu
     * @deprecated use {@link #menu(String, MenuItem...)} instead
     */
    @Deprecated(forRemoval = true)
    public static Menu newMenu(String text, MenuItem... items) {
        return new Menu(text, null, items);
    }

    /**
     * Creates new menu. Null items are ignored which allows to create menu items optionally.
     *
     * @param text  menu text
     * @param items menu items
     * @return menu
     */
    public static Menu menu(String text, MenuItem... items) {
        return menu(text, null, items);
    }

    /**
     * Creates new menu. Null items are ignored which allows to create menu items optionally.
     *
     * @param text  menu text
     * @param node  menu image node
     * @param items menu items
     * @return menu
     */
    public static Menu menu(String text, Node node, MenuItem... items) {
        var filtered = Arrays.stream(items)
                .filter(Objects::nonNull)
                .toArray(MenuItem[]::new);
        return new Menu(text, node, filtered);
    }

    /**
     * Creates new menu bar. useSystemMenuBar property is set to true.
     *
     * @param menus menus
     * @return menu bar
     */
    public static MenuBar menuBar(Menu... menus) {
        var menuBar = new MenuBar(menus);
        menuBar.setUseSystemMenuBar(true);
        return menuBar;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy