栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JavaFX中菜单控件的常见操作

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaFX中菜单控件的常见操作

import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.collections.transformation.FilteredList;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.KeyCombination;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;

import java.io.InputStream;
import java.util.ArrayList;


public class MenuTest extends Application {
    private ToggleGroup tg = new ToggleGroup();
    private PropertyListener pl = new PropertyListener(tg);
    private MenuItemsFactory mf = new MenuItemsFactory(tg);

    public static void main(String[] args) {
        launch(args);
    }
    @Override
    public void start(Stage primaryStage) throws Exception {
        AnchorPane anchorPane = new AnchorPane();
        MenuBar menuBar = new MenuBar();



        pl.propertyListen();

        for (Menu menu : mf.getMenus()) {

            menuBar.getMenus().add(menu);
        }

        menuBar.setPrefWidth(900);

        anchorPane.getChildren().add(menuBar);




        Scene scene = new Scene(anchorPane);
        primaryStage.setScene(scene);
        primaryStage.setTitle(this.getClass().getSimpleName());
        primaryStage.setHeight(600);
        primaryStage.setWidth(900);
        
        primaryStage.show();

        anchorPane.widthProperty().addListener((observable, oldValue, newValue) -> menuBar.setPrefWidth(newValue.doubleValue()));
    }
}


class PropertyListener{
    private ToggleGroup tg;
    private ObservableList toggles;

    public PropertyListener() {
    }

    public PropertyListener(ToggleGroup tg) {
        this.tg = tg;
        toggles = tg.getToggles();
    }

    public void propertyListen(){
        tg.selectedToggleProperty().addListener((observable, oldValue, newValue) -> {
            FilteredList filtered = toggles.filtered(e -> e.isSelected());
            for (Toggle toggle : filtered) {
                RadioMenuItem rd = (RadioMenuItem) toggle;
                System.out.println(rd.getText()+"选中!");
            }
        });
    }
}


class MenuItemsFactory{
    private ArrayList menus = new ArrayList<>();
    private ToggleGroup tg;
    public MenuItemsFactory(ToggleGroup tg) {
        this.tg = tg;
        Menu menu0 = new Menu("颜色");
        Menu menu1 = new Menu("粗细");
        Menu menu2 = new Menu("图形");
        Menu menu3 = new Menu("快捷工具");
        Menu menu4 = new Menu("单选按钮菜单");
        Menu menu5 = new Menu("复选按钮菜单");


        MenuItem colorR = new MenuItem("红色");
        ImageView redView = new ImageView("resource/img_1.png");
        redView.setFitHeight(10);
        redView.setFitWidth(10);
        colorR.setGraphic(redView);

        MenuItem colorY = new MenuItem("黄色");
        colorY.setStyle(
                "-fx-background-color:#EFE030FF;"
        );
        MenuItem colorB = new MenuItem("蓝色");
        colorB.setStyle(
                "-fx-background-color:#538edc;"
        );
        menu0.getItems().addAll(colorR,colorB,colorY);

        //###################################################################################################

        MenuItem borderT = new MenuItem("粗");
        MenuItem borderM = new MenuItem("中");
        MenuItem borderS = new MenuItem("细");
        menu1.getItems().addAll(borderS,borderM,borderT);
        //###################################################################################################


        MenuItem spaceD = new MenuItem("默认");
        MenuItem spaceR = new MenuItem("矩形");
        MenuItem spaceE = new MenuItem("椭圆");
        MenuItem spaceL = new MenuItem("直线");

        SeparatorMenuItem separator0 = new SeparatorMenuItem();
        SeparatorMenuItem separator1 = new SeparatorMenuItem();

        menu2.getItems().addAll(spaceD,separator0,spaceR,separator1,spaceE,spaceL);
        //###################################################################################################

        MenuItem manageC = new MenuItem("清空");
        MenuItem manageE = new MenuItem("擦除");

        Menu manageElse = new Menu("其他");
        manageElse.getItems().addAll(new MenuItem("About"),new MenuItem("Welcome"));

        manageC.setAccelerator(KeyCombination.valueOf("ctrl+alt+c"));
        manageC.setOnAction(e-> System.out.println("清空成功!"));
        menu3.getItems().addAll(manageC,manageE,manageElse);
        //###################################################################################################


        RadioMenuItem red = new RadioMenuItem("RED");
        RadioMenuItem yellow = new RadioMenuItem("YELLOW");
        RadioMenuItem blue = new RadioMenuItem("BLUE");
        red.setToggleGroup(tg);
        yellow.setToggleGroup(tg);
        blue.setToggleGroup(tg);
        menu4.getItems().addAll(red,yellow,blue);

        //###################################################################################################


        CheckMenuItem checkMenuItem = new CheckMenuItem("Option_1");
        CheckMenuItem checkMenuItem1 = new CheckMenuItem("Option_2");
        CheckMenuItem checkMenuItem2 = new CheckMenuItem("Option_3");
        menu5.getItems().addAll(checkMenuItem,checkMenuItem1,checkMenuItem2);
        //###################################################################################################

        menus.add(menu0);
        menus.add(menu1);
        menus.add(menu2);
        menus.add(menu3);
        menus.add(menu4);
        menus.add(menu5);


    }


    public MenuItemsFactory(ArrayList menus,ToggleGroup tg) {
        this.tg = tg;
        this.menus = menus;
    }


    public ArrayList getMenus() {
        return menus;
    }

    public void setMenus(ArrayList menus) {

        this.menus = menus;
    }

    public ToggleGroup getTg() {
        return tg;
    }

    public void setTg(ToggleGroup tg) {
        this.tg = tg;
    }
}

效果:

javafxUI

 代码涉及Lambda表达式、流操作,可能需要一定的Java基础才能理解个别代码段。

推荐的JavaFX学习视频课程:JavaFX视频教程

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/841482.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号