java8 springboot 集成javaFx 实现一个客户端程序
1. 先创建一个springboot 程序(此步骤不做流程展示)
2. 更改springboot的版本依赖和导入所需依赖
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.7</version><relativePath/> <!-- lookup parent from repository -->
</parent><properties><java.version>1.8</java.version><project.build.jdk>1.8</project.build.jdk>
</properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!--javafx--><dependency><groupId>de.roskenet</groupId><artifactId>springboot-javafx-support</artifactId><version>2.1.6</version></dependency>
</dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><!--打包插件--><plugin><groupId>com.zenjava</groupId><artifactId>javafx-maven-plugin</artifactId><version>8.8.3</version><configuration><vendor>测试</vendor><mainClass>cn.mt4.follow.FollowOrderApplication</mainClass></configuration></plugin></plugins>
</build>
3.创建层级结构
3.1 在resources 目录下创建 fxml(可根据自己习惯更改) 文件夹 用于存放 .fxml 文件
3.2 在XXXApplication 主程序同一层级创建controller(可根据自己习惯更改) 和 view(可根据自己习惯更改) 文件夹
4. 编写代码
4.1 编写.fxml 文件内容(此文件是图形界面内容)
为了快速开发建议安装 JavaFX Scene Builder 2.0 工具,该工具可以进行拖拉拽的形式开发界面.例子:

图形界面画完之后 可以点击左上角的 File-> Save as 将内容保存为 .fxml 文件 ,并将此文件放到 resources 下的 fxml 文件夹中,博主这里命名为了LoginFxml.fxml ,示例代码如下所示:
<?xml version="1.0" encoding="UTF-8"?><?import javafx.scene.control.*?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.text.*?>
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0"prefWidth="600.0"xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"fx:controller="cn.mt4.follow.controller.LoginController"><children><Label fx:id="accountLabel" layoutX="129.0" layoutY="122.0" text="账号:"><font><Font size="18.0"/></font></Label><Label fx:id="passwordLabel" layoutX="129.0" layoutY="188.0" text="密码:"><font><Font size="18.0"/></font></Label><TextField fx:id="accountField" layoutX="200.0" layoutY="116.0" promptText="请输入账号"><font><Font size="18.0"/></font></TextField><TextField fx:id="passwordField" layoutX="200.0" layoutY="182.0" promptText="请输入密码"><font><Font size="18.0"/></font></TextField><Button fx:id="loginButton" layoutX="335.0" layoutY="283.0" mnemonicParsing="false" text="登录"><font><Font size="18.0"/></font></Button><Button fx:id="resetButton" layoutX="170.0" layoutY="283.0" mnemonicParsing="false" text="重置"><font><Font size="18.0"/></font></Button></children>
</Pane>
注意 JavaFX Scene Builder 2.0 保存的.fxml 文件中是没有 fx:controller 和 fx:id 这两个内容的,需要自己填写.
4.2 分别在view 和 controller 文件夹中创建对应的类
view 类 需要继承 AbstractFxmlView 类,并使用@FXMLView 注解 与 对应的.fxml 文件做绑定.如以下示例:
package cn.mt4.follow.view;import de.felixroske.jfxsupport.AbstractFxmlView;
import de.felixroske.jfxsupport.FXMLView;@FXMLView(value = "/fxml/LoginFxml.fxml")
public class LoginView extends AbstractFxmlView {
}
controller 类 需要 实现 Initializable 接口 ,并重写 initialize 方法,如以下示例:
package cn.mt4.follow.controller;import de.felixroske.jfxsupport.FXMLController;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;import java.net.URL;
import java.util.ResourceBundle;@FXMLController
public class LoginController implements Initializable {@FXMLprivate TextField accountField;@FXMLprivate TextField passwordField;@FXMLprivate Button loginButton;/*** Called to initialize a controller after its root element has been* completely processed.** @param location The location used to resolve relative paths for the root object, or* <tt>null</tt> if the location is not known.* @param resources The resources used to localize the root object, or <tt>null</tt> if* the root object was not localized.*/@Overridepublic void initialize(URL location, ResourceBundle resources) {loginButton.setOnAction(e -> {String accountFieldText = accountField.getText();String passwordFieldText = passwordField.getText();System.out.println("accountFieldText:" + accountFieldText);System.out.println("passwordFieldText:" + passwordFieldText);});}
}
注意: 这里 TextField 和 Button 导入的jar 包是 javafx.scene.control.*
accountField 等属性名与 .fxml 文件中fx:id 定义的名称保持一致
4.3 更改XXXApplication主程序的内容
需要继承 AbstractJavaFxApplicationSupport 类,示例代码:
package cn.mt4.follow;import cn.mt4.follow.view.LoginView;
import de.felixroske.jfxsupport.AbstractJavaFxApplicationSupport;
import javafx.scene.image.Image;
import javafx.stage.Stage;
import org.springframework.boot.autoconfigure.SpringBootApplication;import java.util.Collection;@SpringBootApplication
public class FollowOrderApplication extends AbstractJavaFxApplicationSupport {public static void main(String[] args) {launch(FollowOrderApplication.class, LoginView.class, args);
// SpringApplication.run(FollowOrderApplication.class, args);}@Overridepublic void start(Stage stage) throws Exception {stage.setTitle("XXX管理系统");super.start(stage);}@Overridepublic Collection<Image> loadDefaultIcons() {return super.loadDefaultIcons();}
}
至此结束.运行main方法即可运行程序.
正式完成之后需要打包成 可执行文件 ,因在pom 中 导入了 javafx-maven-plugin 插件 ,所以可以在maven中 使用 双击 jfx:native 来打包,运行成功之后会在 target/jfx/native 目录中 生成 .exe 文件 .
相关文章:
java8 springboot 集成javaFx 实现一个客户端程序
1. 先创建一个springboot 程序(此步骤不做流程展示) 2. 更改springboot的版本依赖和导入所需依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.7</versio…...
MySQL(高级特性篇) 06 章——索引的数据结构
一、为什么使用索引 索引是存储引擎用于快速找到数据记录的一种数据结构,就好比一本教科书的目录部分,通过目录找到对应文章的页码,便可快速定位到需要的文章。MySQL中也是一样的道理,进行数据查找时,首先查看查询条件…...
PanWeidb-使用BenchmarkSQL对磐维数据库进行压测
本文提供PanweiDb使用BenchmarkSQL进行性能测试的方法和测试数据报告。 BenchmarkSQL,一个JDBC基准测试工具,内嵌了TPC-C测试脚本,支持很多数据库,如PostgreSQL、Oracle和Mysql等。 TPC-C是专门针对联机交易处理系统(OLTP系统)的规范,一般情况下我们也把这类系统称为业…...
AR 在高校实验室安全教育中的应用
AR应用APP可以内置实验室安全功能介绍,学习并考试(为满足教育部关于实验室人员准入条件),AR主模块。其中AR主模块应该包括图形标识码的扫描,生成相应模型,或者火灾、逃生等应急处置的路线及动画演示。考试采…...
微信小程序实现个人中心页面
文章目录 1. 官方文档教程2. 编写静态页面3. 关于作者其它项目视频教程介绍 1. 官方文档教程 https://developers.weixin.qq.com/miniprogram/dev/framework/ 2. 编写静态页面 mine.wxml布局文件 <!--index.wxml--> <navigation-bar title"个人中心" ba…...
Spring Boot中的配置文件有哪些类型
在 Spring Boot 中,配置文件用于管理应用程序的设置和参数,通常存放在项目的 src/main/resources 目录下。Spring Boot 支持多种类型的配置文件,并通过这些文件来控制应用的行为和环境配置。 1. application.properties application.proper…...
Spring Boot 项目启动后自动加载系统配置的多种实现方式
Spring Boot 项目启动后自动加载系统配置的多种实现方式 在 Spring Boot 项目中,可以通过以下几种方式实现 在项目启动完成后自动加载系统配置缓存操作 的需求: 1. 使用 CommandLineRunner CommandLineRunner 是一个接口,可以用来在 Spring…...
如何在 CentOS 中生成 CSR
在本教程中,我们将向您展示如何在CentOS 7和6中生成CSR。您可以直接从服务器生成 CSR。 只需按照以下步骤操作: 第 1 步:使用安全外壳 (SSH) 登录您的服务器 步骤 2:创建私钥和 CSR 文件 在提示符处键入以…...
qml XmlListModel详解
1、概述 XmlListModel是QtQuick用于从XML数据创建只读模型的组件。它可以作为各种view元素的数据源,比如ListView、GridView、PathView等;也可以作为其他和model交互的元素的数据源。通过XmlRole定义角色,如name、age和height,并…...
C++并发编程之跨应用程序与驱动程序的单生产者单消费者队列
设计一个单生产者单消费者队列(SPSC队列),不使用C STL库或操作系统原子操作函数,并且将其放入跨进程共享内存中以便在Ring3(用户模式)和Ring0(内核模式)之间传递数据,是一…...
PostgreSQL技术内幕22:vacuum full 和 vacuum
文章目录 0.简介1.概念及使用方式2.工作原理2.1 主要功能2.2 清理流程2.3 防止事务id环绕说明 3.使用建议 0.简介 在之前介绍MVCC文章中介绍过常见的MVCC实现的两种方式,一种是将旧数据放到回滚段,一种是直接生成一条新数据(对于删除是不删除…...
【网络】:网络编程套接字
目录 源IP地址和目的IP地址 源MAC地址和目的MAC地址 源端口号和目的端口号 端口号 VS 进程ID TCP协议和UDP协议 网络字节序 字符串IP和整数IP相互转换 查看当前网络的状态 socket编程接口 socket常见API 创建套接字(socket) 绑定端口号&…...
java基础概念55-不可变集合
一、定义 不可变集合:不可以被修改的集合,只能查询。(长度、内容均不可被修改) 二、创建不可变集合 【注意】: 此方法是在JDK9中引入的。 2-1、list不可变集合 示例: import java.util.List;public cla…...
深入理解 C++ 函数重载
在 C 中, 函数重载是一个非常强大的特性, 允许多个函数使用相同的名称, 但具有不同的参数类型. 重载解析决定了在给定的调用中, 编译器应选择哪个版本的重载函数. 本文将深入探讨 C 重载解析的工作原理, 帮助你在实际编程中更好地理解这一机制. 重载(Overload) vs 重写(Overri…...
相机和激光雷达的外参标定 - 无标定板版本
1. 实现的效果 通过本软件实现求解相机和LiDAR的外参,即2个传感器之间的三维平移[x, y, z]和三维旋转[roll, pitch, yaw]。完成标定后,可将点云投影到图像,效果图如下: 本软件的优势:(1)无需特…...
Redis 知识速览
文章目录 1. Redis 简介2. Redis 优缺点3. Redis 高性能4. Redis VM 机制5. Redis 数据类型6. 应用场景7. 持久化8. 过期策略9. 内存相关10. 线程模型11. 事务12. 集群 1. Redis 简介 定义:Redis 是一个用 C 语言编写的高性能非关系型(NoSQL)…...
LeetCode 热题 100_从前序与中序遍历序列构造二叉树(47_105_中等_C++)(二叉树;递归)
LeetCode 热题 100_从前序与中序遍历序列构造二叉树(47_105) 题目描述:输入输出样例:题解:解题思路:思路一(递归): 代码实现代码实现(思路一(递归…...
使用sqlplus的easy connect时如何指定是链接到shared server还是dedicated process
在oracle配置了shared server的情况下 可以使用 :shared来指定链接到shared server也可以默认不指定 不指定的情况下会默认链接到shared server 如果想链接到 dedicated process 则必须显式指定链接到dedicated process server type的类型包括DEDICATED, SHARED, or POOLED. […...
ubuntu22.4 ROS2 安装gazebo(环境变量配置)
ubuntu版本:ubuntu22.4 最近在学习ROS2 视频教程古月居的入门课: 视频教程 文字笔记 问题 在学到关于Gazebo的时候,遇到下面问题: 运行 $ ros2 launch gazebo_ros gazebo.launch.py在这里卡住,不弹出gazebo 解决…...
【机器学习:十四、TensorFlow与PyTorch的对比分析】
1. 发展背景与社区支持 1.1 TensorFlow的背景与发展 TensorFlow是Google于2015年发布的开源深度学习框架,基于其前身DistBelief系统。作为Google大规模深度学习研究成果的延续,TensorFlow从一开始就定位为生产级框架,强调跨平台部署能力和性…...
百川2-13B-4bits开源大模型镜像免配置优势:内置check.sh脚本实现7维度健康检查
百川2-13B-4bits开源大模型镜像免配置优势:内置check.sh脚本实现7维度健康检查 1. 为什么说这个镜像"开箱即用"? 如果你之前部署过大语言模型,肯定经历过这些头疼事:环境配置报错、依赖包冲突、端口被占用、GPU显存不…...
VBA UserForm控件交互实战:跨窗体数据传递与动态更新
1. UserForm基础与跨窗体数据传递原理 刚接触VBA UserForm时,我经常被各种控件的交互问题困扰。特别是当需要多个窗体协同工作时,数据传递就成了大难题。记得有次做订单管理系统,主窗体收集客户信息,子窗体处理产品明细࿰…...
从“无风扇散热”到“完美机房”:我与AI的一场散热与存储深度对话
本文源于我与AI的一次技术探讨,从无风扇散热模组的工作原理出发,逐步深入到浸泡式液冷、热辐射优化、算力中心架构,最终延伸至存储介质的可靠性对比。这是一次从“芯片级散热”到“系统级存储”的完整技术认知之旅。前言:一个好奇…...
保姆级教学:用星图AI云平台快速搭建Clawdbot,让Qwen3-VL:30B接入飞书
保姆级教学:用星图AI云平台快速搭建Clawdbot,让Qwen3-VL:30B接入飞书 1. 为什么选择本地部署多模态办公助手? 在日常办公中,我们经常遇到需要处理图片和文字的场景: 同事发来的产品截图需要快速分析内容会议白板照片…...
人脸识别快速上手:Retinaface+CurricularFace镜像教程,简单易学
人脸识别快速上手:RetinafaceCurricularFace镜像教程,简单易学 1. 理解人脸识别黄金组合 在开始动手之前,我们先花两分钟了解Retinaface和CurricularFace这对黄金搭档: Retinaface:就像一位专业的摄影师,…...
MiniCPM-o-4.5-nvidia-FlagOS开源镜像:FlagOS软件栈赋能的NVIDIA GPU原生推理方案
MiniCPM-o-4.5-nvidia-FlagOS开源镜像:FlagOS软件栈赋能的NVIDIA GPU原生推理方案 想快速体验一个能看懂图片、还能跟你聊天的AI助手吗?今天要介绍的MiniCPM-o-4.5-nvidia-FlagOS开源镜像,就是一个开箱即用的多模态AI解决方案。它基于FlagOS…...
Flux Sea Studio 极限测试:生成8K超高清巨幅海景壁纸的技术挑战与实现
Flux Sea Studio 极限测试:生成8K超高清巨幅海景壁纸的技术挑战与实现 最近在折腾AI生成图片,发现一个挺有意思的挑战:用Flux Sea Studio这类模型,能不能做出那种能铺满整块大屏幕的、细节拉满的8K超高清壁纸?特别是海…...
STM32F407 HAL库实战:TIM触发ADC+DMA实现多通道信号实时统计与可视化
1. 为什么需要TIM触发ADCDMA的多通道采集方案 在嵌入式数据采集系统中,实时性和效率往往是核心诉求。想象一下这样的场景:我们需要同时监测工业设备上的4个振动传感器,每个传感器的信号都需要以10kHz的频率采样。如果采用传统的轮询方式&…...
RMBG-2.0镜像免配置部署:无需配置Python环境,开箱即用Web交互界面
RMBG-2.0镜像免配置部署:无需配置Python环境,开箱即用Web交互界面 你是不是也遇到过这样的烦恼?想用AI模型给图片换个背景,结果光是安装Python环境、配置依赖库就折腾了大半天,最后还可能因为版本冲突、CUDA不兼容等问…...
Python原生AOT编译2026架构设计图(含C-API二进制兼容性矩阵+GC停顿压缩至≤80μs实证)
第一章:Python原生AOT编译2026架构全景概览Python原生AOT(Ahead-of-Time)编译在2026年已演进为一套融合语言语义、运行时契约与硬件感知能力的系统级基础设施。它不再依赖传统解释器或JIT中间态,而是通过静态类型推导、控制流图全…...
