javaFx桌面程序开发代码示例

news2024/12/24 9:25:30

程序效果:
在这里插入图片描述
弹窗内容:
在这里插入图片描述

1.启动类
HelloJavaFX:

import javafx.application.Application;
import javafx.application.Platform;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class HelloJavaFX extends Application {

    private BorderPane root = new BorderPane();
    private int pageIndexs = 0;
    private int pageSize = 10;
    private int count = 0;

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("标题");
        primaryStage.initStyle(StageStyle.DECORATED);

        Scene scene = new Scene(root, 1000, 500, Color.WHITE);
//        root.setBackground(new Background(new BackgroundFill(Color.LIGHTGRAY,null,null)));

        // 初始化菜单
        MenuBar menuBar = new MenuBar();
        menuBar.prefWidthProperty().bind(primaryStage.widthProperty());
        root.setTop(menuBar);
        meanu(menuBar);// 调用meanu生成菜单方法

        // 主页内容
        TextField textField = new TextField();
        textField.setPromptText("请输入每页条数");
        textField.setMaxWidth(100);
        Button button = new Button("确定");
        button.setOnAction(actionEvent -> {
            if (!textField.getText().isEmpty()) {
                pageSize = Integer.parseInt(textField.getText());
                Pagination pagination = pagination();
                root.setBottom(pagination);
            }
        });

        root.setRight(button);
        root.setLeft(textField);

        TableView tables = intiTable();
        root.getChildren().add(tables);

        // 分页
        Pagination pagination = pagination();
        root.setBottom(pagination);


        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * 初始化查询条件
     */
    private HBox initeSearch() {
        // 查询条件
        HBox hbox = new HBox();
        hbox.setSpacing(10);
        Label label = new Label("查询条件");
        TextField textField = new TextField();
        textField.setPromptText("请输入查询条件");
        Button button = new Button("查询");
        button.setOnAction(actionEvent -> {
            System.out.println("查询");
        });
        hbox.getChildren().addAll(label, textField, button);
        return hbox;
    }

    /**
     * 初始化菜单
     */
    private void meanu(MenuBar menuBar) {

        // File menu - new, save, exit,滚动条按钮
        Menu fileMenu = new Menu("文件");
        // 新建==================================================

        MenuItem newMenuItem = new MenuItem("新建");
        // 弹出新窗口代码
        Stage newWindow = new Stage();
        newMenuItem.setOnAction(actionEvent -> {
            windows(newWindow);// 调用windows方法
        });

        // 添加==================================================
        MenuItem saveMenuItem = new MenuItem("添加");
        saveMenuItem.setOnAction(actionEvent -> {
            System.out.println("添加");
        });

        // 退出==================================================
        MenuItem exitMenuItem = new MenuItem("退出");
        exitMenuItem.setOnAction(actionEvent -> Platform.exit());


        // 添加滚动条子菜单按钮====================================
        CustomMenuItem customMenuItem = new CustomMenuItem(new Slider());
        customMenuItem.setHideOnClick(false);

        // 添加自定义菜单项========================================
        fileMenu.getItems().addAll(newMenuItem, saveMenuItem,
                new SeparatorMenuItem(), exitMenuItem, customMenuItem);

        // 编辑==================================================
        Menu webMenu = new Menu("编辑");
        CheckMenuItem htmlMenuItem = new CheckMenuItem("网页");
        htmlMenuItem.setSelected(true);
        webMenu.getItems().add(htmlMenuItem);

        CheckMenuItem cssMenuItem = new CheckMenuItem("样式");
        cssMenuItem.setSelected(true);
        webMenu.getItems().add(cssMenuItem);


        // 帮助==================================================
        Menu sqlMenu = new Menu("帮助");
        ToggleGroup tGroup = new ToggleGroup();
        RadioMenuItem mysqlItem = new RadioMenuItem("注册");
        mysqlItem.setToggleGroup(tGroup);

        RadioMenuItem oracleItem = new RadioMenuItem("忘记密码");
        oracleItem.setToggleGroup(tGroup);
        oracleItem.setSelected(true);

        sqlMenu.getItems().addAll(mysqlItem, oracleItem,
                new SeparatorMenuItem());

        Menu tutorialManeu = new Menu("教程");
        tutorialManeu.getItems().addAll(
                new CheckMenuItem("Java"),
                new CheckMenuItem("JavaFX"),
                new CheckMenuItem("Swing"));
        sqlMenu.getItems().add(tutorialManeu);

        menuBar.getMenus().addAll(fileMenu, webMenu, sqlMenu);
    }

    /**
     * 初始化数据
     *
     * @return TableView
     */
    private List<AdminUserDO> resetList() {
        List<AdminUserDO> adminUserDOList = new AdminUserServices().getList();
        count = adminUserDOList.size();
        adminUserDOList = adminUserDOList.stream().filter(adminUserDO -> adminUserDO.getId() > pageIndexs).collect(Collectors.toList());
        adminUserDOList = adminUserDOList.stream().filter(adminUserDO -> pageIndexs == 0 ? adminUserDO.getId() <= pageSize : adminUserDO.getId() <= pageSize * Integer.valueOf(pageIndexs + 1)).collect(Collectors.toList());
        adminUserDOList = adminUserDOList.stream().filter(adminUserDO -> adminUserDO.getId() >= pageSize * Integer.valueOf(pageIndexs) + 1).collect(Collectors.toList());
        return adminUserDOList;
    }

    /**
     * 初始化弹窗
     *
     * @return TableView
     */
    private void windows(Stage newWindow) {
        newWindow.close();// 关闭新窗口 最后再调用show()方法,防止重复开启
        newWindow.setTitle("列表");
        // 设置新窗口的内容(这里仅使用一个简单的VBox作为示例)
        VBox vBox = new VBox();
        // 可以在这里添加更多内容到vBox
        TextField textField = new TextField();
        textField.setMaxWidth(200);
        textField.setMaxHeight(200);
        textField.setPromptText("请输入");
        TextField textField2 = new TextField();
        textField2.setMaxWidth(200);
        textField2.setMaxHeight(200);
        textField2.setPromptText("请输入");
        TextField textField3 = new TextField();
        textField3.setMaxWidth(200);
        textField3.setMaxHeight(200);
        textField3.setPromptText("请输入");
        TableView table = intiTable();// 初始化表格
        // 初始化查询条件
        HBox hbox = initeSearch();
        vBox.getChildren().add(hbox);
        vBox.getChildren().add(table);

        Pagination pagination = pagination();// 初始化分页
        vBox.getChildren().add(pagination);

        Scene scenes = new Scene(vBox, 950, 400);
        newWindow.setScene(scenes);
        newWindow.show();
    }

    /**
     * 初始化表格
     *
     * @return TableView
     */
    private TableView intiTable() {
        // 主页内容
        TableView tables = new TableView();
        Class<AdminUserDO> adminUserDOClasses = AdminUserDO.class;// 表头实体

        TableColumn[] tableColumn = field(adminUserDOClasses);// 初始化表头
        for (int i = 0; i < tableColumn.length; i++) {
            tables.getColumns().add(tableColumn[i]);// 添加表头
        }

        // 查询所有用户数据
        ObservableList<AdminUserDO> datas = FXCollections.observableArrayList();
        List<AdminUserDO> adminUserDOList = resetList();

        // 添加数据到表格中
        adminUserDOList.stream().forEach(adminUserDO1 -> {
            datas.add(adminUserDO1);
        });
        tables.setItems(datas);
        return tables;
    }

    /**
     * 初始化表头
     *
     * @param adminUserDOClasses
     * @return
     */
    private TableColumn[] field(Class<AdminUserDO> adminUserDOClasses) {
        Field[] fieldNameses = adminUserDOClasses.getDeclaredFields();
        TableColumn[] tableColumns = new TableColumn[fieldNameses.length];
        final int[] i = {0};
        Arrays.stream(fieldNameses).forEach(field -> {
            String name = field.getName();
            TableColumn tableColumn = null;
            switch (name) {
                case "id":
                    tableColumn = new TableColumn("序号");
                    break;
                case "username":
                    tableColumn = new TableColumn("账号");
                    break;
                case "password":
                    tableColumn = new TableColumn("密码");
                    break;
                case "nickname":
                    tableColumn = new TableColumn("姓名");
                    break;
                case "sex":
                    tableColumn = new TableColumn("性别");
                    break;
                case "email":
                    tableColumn = new TableColumn("邮箱");
                    break;
                case "mobile":
                    tableColumn = new TableColumn("手机号");
                    break;
                case "remark":
                    tableColumn = new TableColumn("备注");
                    break;
                default:
                    tableColumn = new TableColumn(field.getName());
                    break;
            }
            tableColumn.setCellValueFactory(new PropertyValueFactory<>(field.getName()));
            tableColumns[i[0]] = tableColumn;// 添加到数组中
            i[0]++;
//            TableColumn tableColumn = null;
//            if (field.getName().equals("id")) {
//                tableColumn = new TableColumn("序号");
//            } else if (field.getName().equals("username")) {
//                tableColumn = new TableColumn("账号");
//            } else if (field.getName().equals("password")) {
//                tableColumn = new TableColumn("密码");
//            } else if (field.getName().equals("nickname")) {
//                tableColumn = new TableColumn("姓名");
//            } else if (field.getName().equals("sex")) {
//                tableColumn = new TableColumn("性别");
//            } else if (field.getName().equals("email")) {
//                tableColumn = new TableColumn("邮箱");
//            } else if (field.getName().equals("mobile")) {
//                tableColumn = new TableColumn("手机号");
//            } else if (field.getName().equals("remark")) {
//                tableColumn = new TableColumn("备注");
//            } else {
//                tableColumn = new TableColumn(field.getName());
//            }
//            tableColumn.setCellValueFactory(new PropertyValueFactory<>(field.getName()));
//            tableColumns[i[0]] = tableColumn;// 添加到数组中
//            i[0]++;
        });
        return tableColumns;
    }

    /**
     * 初始化分页
     *
     * @return TableView
     */
    private Pagination pagination() {
        // 分页
        Pagination pagination = new Pagination();
        pagination.setCurrentPageIndex(pageIndexs);
        pagination.setPageCount(count / pageSize);
        pagination.setPageFactory((Integer pageIndex) -> {
            pageIndexs = pageIndex;
            TableView tableView = intiTable();// 初始化表格
            root.setCenter(tableView);
            TextField textField = new TextField();
            textField.setMaxWidth(50);// 最大宽度
            textField.setText(String.valueOf(pageIndexs + 1));
//            textField.setPromptText(String.valueOf(pageIndexs+1));
            return textField;
        });
        return pagination;
    }


    public static void main(String[] args) {
        launch(args);
    }

}



2.模拟数据列表:
AdminUserServices:

import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class AdminUserServices {

    List<AdminUserDO> getList(){
        List<AdminUserDO> adminUserDOList=new ArrayList<>();
        for (int i =0;i<20;i++){
            AdminUserDO adminUserDO=new AdminUserDO();
            adminUserDO.setId(Long.valueOf(i));
            adminUserDO.setUsername("测试"+i);
            adminUserDO.setPassword("123456"+i);
            adminUserDO.setEmail("123456789@163.com");
            adminUserDO.setMobile("123456789");
            adminUserDO.setSex(1);
            adminUserDO.setRemark("备注"+i);
            adminUserDOList.add(adminUserDO);
        }
        return adminUserDOList;
    };
}

3.数据实体:
AdminUserDO:

import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.module.system.enums.common.SexEnum;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

import java.time.LocalDateTime;
import java.util.Set;

public class AdminUserDO {

    /**
     * 用户ID
     */
    private Long id;
    /**
     * 用户账号
     */
    private String username;
    /**
     * 加密后的密码
     *
     * 因为目前使用 {@link BCryptPasswordEncoder} 加密器,所以无需自己处理 salt 盐
     */
    private String password;
    /**
     * 用户昵称
     */
    private String nickname;
    /**
     * 备注
     */
    private String remark;
    /**
     * 部门 ID
     */
    private Long deptId;
    /**
     * 岗位编号数组
     */
    private Set<Long> postIds;
    /**
     * 用户邮箱
     */
    private String email;
    /**
     * 手机号码
     */
    private String mobile;
    /**
     * 用户性别
     *
     * 枚举类 {@link SexEnum}
     */
    private Integer sex;
    /**
     * 用户头像
     */
    private String avatar;
    /**
     * 帐号状态
     *
     * 枚举 {@link CommonStatusEnum}
     */
    private Integer status;
    /**
     * 最后登录IP
     */
    private String loginIp;
    /**
     * 最后登录时间
     */
    private LocalDateTime loginDate;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

    public Long getDeptId() {
        return deptId;
    }

    public void setDeptId(Long deptId) {
        this.deptId = deptId;
    }

    public Set<Long> getPostIds() {
        return postIds;
    }

    public void setPostIds(Set<Long> postIds) {
        this.postIds = postIds;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public Integer getSex() {
        return sex;
    }

    public void setSex(Integer sex) {
        this.sex = sex;
    }

    public String getAvatar() {
        return avatar;
    }

    public void setAvatar(String avatar) {
        this.avatar = avatar;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public String getLoginIp() {
        return loginIp;
    }

    public void setLoginIp(String loginIp) {
        this.loginIp = loginIp;
    }

    public LocalDateTime getLoginDate() {
        return loginDate;
    }

    public void setLoginDate(LocalDateTime loginDate) {
        this.loginDate = loginDate;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2047842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

赵本山:你把这玩意借我带上,黄晓娟:驴蒙脸你要带这个?--小品《麻将豆腐》(中3)的台词与解说

赵本山&#xff1a;你把这玩意借我带上&#xff0c;黄晓娟&#xff1a;驴蒙脸你要带这个&#xff1f; --小品《麻将豆腐》&#xff08;中3&#xff09;的台词与解说 &#xff08;接上&#xff09; 黄晓娟&#xff08;饰演小姨子&#xff09;&#xff1a;忘了麻将 赵本山&…

车载客流计数器在公交系统中的应用

车载客流计数器在公交系统中的应用&#xff0c;已成为提升运营效率与服务质量的关键工具。随着大数据概念的深入人心&#xff0c;人们愈发认识到数据在决策中的核心地位。公交车客流统计的引入&#xff0c;正是基于这一认识&#xff0c;旨在为公交车辆的运营组织提供详实、精准…

MySQL:表的设计原则和聚合函数

所属专栏&#xff1a;MySQL学习 &#x1f48e;1. 表的设计原则 1. 从需求中找到类&#xff0c;类对应到数据库中的实体&#xff0c;实体在数据库中表现为一张一张的表&#xff0c;类中的属性对应着表中的字段 2. 确定类与类的对应关系 3. 使用SQL去创建具体的表 范式&#xff1…

【Linux多线程】线程同步 与 生产者消费者模型(无锁化模型)

文章目录 1. Linux线程同步1.1 条件变量1.2 同步概念与竞态条件1.3 条件变量函数示例代码1:示例代码2 1.4 为什么 pthread_ cond_ wait 需要互斥量1.5 条件变量使用规范 2. 生产者消费者模型3. 读者 写者 问题3.1 读写锁3.2 读写锁的相关接口 4. 扩展&#xff1a;无锁化模型4.1…

Python 如何创建和解析 XML 文件

XML&#xff08;可扩展标记语言&#xff09;是一种广泛使用的标记语言&#xff0c;主要用于存储和传输数据。它具有结构化、层次化的特点&#xff0c;常被用作数据交换格式。Python 提供了多种工具和库来处理 XML 文件&#xff0c;包括创建、解析和操作 XML 文档。 一、XML 简…

免费webp转jpeg或gif工具

1、”“添加webp文件&#xff1b;”-“移除webp文件&#xff1b;”>>“开始转换&#xff1b;”X“清空内容。 也可以把想要转换的文件全选&#xff0c;拖进窗口里。 2、默认将webp文件转换成同名的png文件放在原来的文件夹里。如果不是静态图片&#xff0c;则自动尝试转…

案例:ZooKeeper + Kafka消息队列集群部署

目录 消息队列 概念 使用场景 不适宜 适宜 消息队列的特征 存储 异步 异步的优点 同步 为什么需要消息队列 解耦 作用 冗余 扩展性 灵活性 峰值处理能力 可恢复性 顺序保证 Kafka 概念 Kafka技术名词 &#xff08;1&#xff09;Broker &#xff08;2&a…

基于Orangepi全志H616智能视觉垃圾分类系统

目录 一、功能需求 二、Python的安装和环境搭建 三、Python基础 3.1 Python的特点&#xff1a; 3.2 Python的基础学习&#xff1a; 3.3 字典的多层嵌套&#xff1a; 四、C语言调用Python 4.1 搭建编译环境&#xff1a; 4.2 C语言执行Python语句&#xff1a; 4.3 C语言…

22 注意力机制—Transformer

目录 TransformerTransformer 架构对比 seq2seq多头注意力(Multi-head attention)带掩码的多头注意力(Masked Multi-head attention)基于位置的前馈网络(Positionwise FFN)残差连接和归一化(Add & norm)(加 & 规范化)1、加入归一化能够更好地训练比较深的网络…

UE基础 —— 项目与模板

虚幻引擎 项目 包含游戏和应用程序的所有内容&#xff0c;并将所有内容联系在一起&#xff1b;包含磁盘上的许多文件夹和资产&#xff0c;如蓝图、材质、3D资产、动画等&#xff1b;内容浏览器与磁盘上的文件夹和文件夹结构相同&#xff1b; 每个项目都有与之关联的.uproject文…

性能优化理论篇 | 彻底弄懂系统平均负载

Linux 上的进程状态 要讨论系统平均负载&#xff0c;首先要了解Linux 上的进程状态。 标志名称内核名称及解释R运行中或可运行TASK_RUNNING。进程正在执行或等待执行。可以在用户空间&#xff08;用户代码&#xff09;或内核空间&#xff08;内核代码&#xff09;中运行。S可…

【项目】基于Vue3.2+ElementUI Plus+Vite 通用后台管理系统

构建项目 环境配置 全局安装vue脚手架 npm install -g vue/cli-init打开脚手架图形化界面 vue ui创建项目 在图形化界面创建项目根据要求填写项目相关信息选择手动配置勾选配置项目选择配置项目然后我们就搭建完成啦&#x1f973;&#xff0c;构建可能需要一点时间&#xff0…

Navicat Premium Lite For Linux,一款免费的专业可视化 SQL 数据库设计工具,支持各种数据库并行连接,在业界可是大名鼎鼎!

Navicat Premium Lite For Linux&#xff0c;一款免费的专业可视化 SQL 数据库设计工具&#xff0c;支持各种数据库并行连接&#xff0c;在业界可是大名鼎鼎&#xff01; Navicat 是一个可视化数据库、数据表设计软件&#xff0c;支持MySQL、MariaDB、SQLite、MongoDB、Redshi…

论文阅读笔记:ST-MetaNet-1

目录 前言 摘要 CCS 关键词 介绍 时空相关性的复杂组合 空间相关性 时间相关性 时空相关性的多样性 本篇博客结语 前言 读这篇论文边读边学&#xff0c;每天坚持发博客&#xff0c;看到哪学到哪&#xff0c;这系列文章既有翻译&#xff0c;又有深度详细解释&#xff…

Rust学习笔记1--下载安装和使用

一、下载和安装&#xff1a; 官网&#xff1a;https://www.rust-lang.org/ 直接下载即可&#xff0c;windows&#xff1a;按照教程执行步骤。 二、使用&#xff1a; 2.1 在vscode中安装rust 2.2 编译与运行rust文件&#xff1a; 后缀名rs&#xff1a; 编译&#xff1a; …

org.springframework.boot.autoconfigure.AutoConfiguration.imports 配置没有生效

在spring3.x以后&#xff0c;自动配置需要配置在org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件中 如果你配置了却没生效&#xff0c;有可能是创建的目录不对&#xff0c;正常情况下, META-INF.spring 是一个两层目录&#xff0c;如果是从别的地方复制…

第51集《大佛顶首楞严经》

请大家打开讲义第 111 页。癸三&#xff0c;结责迷情。 当我们在修学首楞严王三昧的时候&#xff0c;要把握两个很重要的原则&#xff1a;第一个就是它修学的方法&#xff0c;第二个就是它修学的目标。 那么&#xff0c;首楞严王的修学方法是什么呢&#xff08;这一点蕅益大师…

零基础读懂 DDPM 数学推导

零基础读懂 DDPM 数学推导 完整PDF文件可以在工坊获得&#xff0c;以下是内容截图。

为何显示keyerror fruit,如何解决??

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

【docker综合篇】关于我用docker搭建了6个应用服务的事

最近一直在捣鼓docker&#xff0c;利用测试服务器&#xff0c;本着犯错就重来(重装系统)的大无畏精神&#xff0c;不断尝试&#xff0c;总结经验&#xff0c;然后在网上搜寻一些关于docker有关的服务镜像&#xff0c;并搭建起来。看着一个个服务在我的服务器跑起来&#xff0c;…