当前位置: 首页 > news >正文

Java FX 学习

声明:参考视频

一. Stage与Scene

在这里插入图片描述

  • 舞台与场景:JavaFX应用程序将Ul容器定义为舞台(Stage)与场景(Scene)Stage类是顶级容器,它对应于窗体,其内容由Scene决定。Scene类是所有可视化内容的容器(container),可以把它看成是一张画布,上面绘制了用户可以看到的内容。
  • Scene Graph 其实就是一颗多叉树,各种控件都是树中的节点。
  • 控件树的节点支持事件响应。
  • 最底层节点通常都是诸如按钮之类的控件也可以是Circle之类的图形。
  • 拥有子树节点称为容器,在JavaFX中成为“布局(Layout)”.
  • 这样做以后可以在窗口Stage中切换Scene从而实现随时切换页面,同时也可以新建Stage从而实现打开多个窗口。

二. Java FX MVC架构

在这里插入图片描述

  • 多窗体通信
    在这里插入图片描述

核心点:在MainClass初始化窗口时,将MainClass的引用传给相应窗口的控制器。之后在每个窗口的控制器中通过MainClass的引用完成从窗口的打开以及主从窗口的通信。
     在主窗口中打开新的窗口: 在MainClass初始化主窗口时,可以将MainClass的引用传给相应从窗口的控制器,然后在主窗口的控制器中通过MainClass的引用调用打开的窗口的函数,从而打开新的窗口。
    在从窗口中关闭从窗口: 在MainClass初始化从窗口时,将从窗口的stage传给从窗口的控制器,在从窗口的控制器中调用stage.close(),从而关闭从窗口。
    主窗口接收从窗口的信息:在MainClass初始化从窗口时,将主窗口的控制器的引用传给从窗口的控制器,在从窗口的控制器中调用主窗口控制器的相应方法,从而在主窗口中显示信息。
    从窗口接收主窗口的信息:在MainClass初始化从窗口时,将MainCLass的引用传给从窗口的控制器,在主窗口的控制器中通过MainCLass的引用的调用相应方法,从而在从窗口中显示信息。

demo下载

注意:在项目中加入资源时,将资源放在与包名同名的resources路径下,以此来方便使用资源文件。如下图所示在项目编译时,会将resources下的资源放到同名的包中。

在这里插入图片描述

三. 事件处理机制

  • 事件响应模式:
    • 传统的事件响应模式
    • Lamda事件响应模式
    • 声明式事件响应模式
//传统的事件响应模式
this.btn.setOnAction(new EventHandler<ActionEvent>() {@Overridepublic void handle(ActionEvent actionEvent) {welcomeText.setText("Hello World!");}});
//Lamda事件响应模式
private void getRandomInt(ActionEvent actionEvent){Random random = new Random();int i = random.nextInt();welcomeText.setText(String.valueOf(i));}
this.btn2.setOnAction(this::getRandomInt);// 声明式事件响应模式
//fxml文件中 onAction="#事件名" <Button fx:id="btn3" layoutX="229.0" layoutY="287.0" mnemonicParsing="false" onAction="#handleRandowm" text="声明式事件响应" />
@FXML
public void handleRandowm(ActionEvent actionEvent) {Random random = new Random();int i = random.nextInt();welcomeText.setText(String.valueOf(i));}
  • 事件派发链
    事件在控件树的传播流程成为事件派发连
    在这里插入图片描述

(1)事件派发链,实际上是一个双向链表,由事件目标对象负责创建。
(2)事件触发时,事件对象在链中传送
(3)事件响应方法(分为EventFilter和EventHandler两类)接收事件对象作为参数。

如下图所示,在这里插入图片描述

    //统一事件处理方法,输出event对象相关属性值//有参数决定是否消费此事件private void handleAndConsumd(Event event,boolean isConsumd,String msg) {if (isConsumd) {event.consume();}String info =String.format("Type:%s,source:%s,target:%s,consume:%s,msg:%s",event.getEventType(), event.getSource(),event.getTarget(),event.isConsumed(), msg);System.out.println(info);}void initListener(){borderpane.addEventFilter(MouseEvent.MOUSE_PRESSED,event -> handleAndConsumd(event, true, "borderpane filter mouse pressed"));borderpane.addEventHandler(MouseEvent.MOUSE_PRESSED, event -> handleAndConsumd(event, false, "borderpane handler mouse pressed"));vbox.addEventFilter(MouseEvent.MOUSE_PRESSED, event -> handleAndConsumd(event, false, "vbox filter mouse pressed"));vbox.addEventHandler(MouseEvent.MOUSE_PRESSED, event -> handleAndConsumd(event, false, "vbox handler mouse pressed"));circle.addEventFilter(MouseEvent.MOUSE_PRESSED, event -> handleAndConsumd(event, false, "circle filter mouse pressed"));circle.addEventHandler(MouseEvent.MOUSE_PRESSED, event -> handleAndConsumd(event, false, "circle handler mouse pressed"));}@Overridepublic void initialize(URL url, ResourceBundle resourceBundle) {initListener();}

三. JavaFX数据绑定机制及应用

  • JavaFX Bean Property: 包括get, set,以及property方法,JAVA FX Property具有动态监听property.addListner()和数据绑定property.bind()等特性。

  • JavaFX数据绑定的编程模式:
    在这里插入图片描述

  • 应用
    在这里插入图片描述
    分析:可以将变化的数据统一抽象为IntegerProperty,进行数据绑定,然后add 和sub只管更改IntergerProperty()(控件上有property属性的直接进行绑定,没有的话可以通过addListner()进行绑定)

    IntegerProperty integerProperty = new SimpleIntegerProperty(0);@Overridepublic void initialize(URL url, ResourceBundle resourceBundle) {arc.setStartAngle(90);arc.setLength(-0);#绑定数据numLabel.textProperty().bind(integerProperty.asString());addBtn.disableProperty().bind(integerProperty.greaterThanOrEqualTo(100));subBtn.disableProperty().bind(integerProperty.lessThanOrEqualTo(0));integerProperty.addListener((observableValue, number, t1) -> {arc.setStartAngle(90);arc.setLength(-t1.intValue() * 3.6);bar.setProgress(t1.intValue() / 100.0);});}@FXMLpublic void sub(ActionEvent actionEvent) {integerProperty.set(integerProperty.get() - 10);}@FXMLpublic void add(ActionEvent actionEvent) {integerProperty.set(integerProperty.get() + 10);}

demo下载

四.Java FX实现MVVM架构

在这里插入图片描述

  • 业务逻辑代码单独抽离抽离出来,
  • view与ViewModel进行数据绑定
  • 控制器调用业务逻辑代码进行相应。
    demo下载

五.多线程

  • Runnable 对象

对于比较耗时的任务,需要使用多线程技术,但对UI控件的修改必须在JavaFX application thread中执行,因此可以使用 Platform.runLater() 推送到JavaFx application thread中执行修改UI控件的任务。

 Runnable task =()-> {try {//TODO: 执行耗时任务的代码Thread.sleep(1000);//Lambda表达式执行的任务,将会被推送到JavaFx application thread中执行//因此,里面可以有直接访问UI控件的代码Platform.runLater(()->{//TODO: 执行修改UI控件的代码});} catch (InterruptedException e) {// TODO Auto-generated catch block} };
  • Task对象(有返回值)里面封装了updateMessage(),updateProgress()修改UI控件的函数。

相关文章:

Java FX 学习

声明&#xff1a;参考视频 一. Stage与Scene 舞台与场景&#xff1a;JavaFX应用程序将Ul容器定义为舞台&#xff08;Stage&#xff09;与场景&#xff08;Scene&#xff09;Stage类是顶级容器&#xff0c;它对应于窗体&#xff0c;其内容由Scene决定。Scene类是所有可视化内容…...

【走迷宫】

题目 DFS代码 #include<bits/stdc.h> using namespace std; const int N 110; int matrix[N][N]; int n, m; int dx[4] {-1, 0, 1, 0}, dy[4] {0, 1, 0, -1}; int dis[N][N]; void dfs(int x, int y, int cnt) {if(cnt > dis[n-1][m-1]) return;if(x n-1 &&a…...

linux(debian)迁移var数据到已分配逻辑卷的物理盘

文章目录 0 背景1 查看当前情况1.1 查看磁盘空间1.2 列出所有可用块设备的信息&#xff0c;而且还能显示他们之间的依赖关系1.3 查看可用磁盘1.4 查看卷组 2 卷组中创建逻辑卷3 创建文件系统4 创建临时文件夹并挂载&#xff0c;然后备份源文件5 修改开机挂载配置5.1 查看原配置…...

【产品那些事】什么是应用程序安全态势管理(ASPM)?

文章目录 前言当前应用安全(AppSec)推进遇到的问题关于ASPM的定义 为什么需要ASPM&#xff1a;B端客户核心需求ASPM产品关键策略理想状态下的ASPMASPM与CSPM的区别国内外产品参考 前言 随着现代软件开发实践的快速演变&#xff0c;特别是在敏捷开发和 DevOps 的推动下&#xf…...

cocosUI多分辨率适配

需求&#xff1a;由于各个设备的分辨率和尺寸并不一样&#xff0c;所以需要一套适配系统去很好的针对不同的设备分辨率或尺寸进行适配&#xff0c;以给玩家一个很好的游戏体验。 目前的主流适配方案 目前&#xff0c;针对不同设备的适配&#xff0c;主流的方案通常包括以下几种…...

无法加载到主类

说明&#xff1a;记录一次项目启动错误&#xff0c;如下&#xff1a; 错误信息&#xff1a;错误: 找不到或无法加载主类 com.hezy.App 原因: java.lang.ClassNotFoundException: com.hezy.App 解决&#xff1a;首先&#xff0c;在项目中勾选这个&#xff0c;显示target文件夹 …...

深入理解Kafka核心设计与实践原理_03

深入理解Kafka核心设计与实践原理_03 03_消费者3.1消费者与消费者组3.2客户端开发3.2.1 必要的参数配置3.2.2 订阅主题与分区 草稿 03_消费者 与生产者对应的是消费者&#xff0c;应用程序可以通过KafkaConsumer来订阅主题&#xff0c;并从订阅的主题中拉取消息。不过在使用Ka…...

MySQL- 覆盖索引

覆盖索引&#xff08;Covering Index&#xff09;是 MySQL 中的一种优化技术&#xff0c;它能够显著提高查询性能。在使用覆盖索引的情况下&#xff0c;查询操作只需要访问索引即可获取所需的数据&#xff0c;而不必再访问表的实际数据行&#xff08;即不需要回表&#xff09;。…...

JSON与EXL文件互转

功能&#xff1a;实现json到excel文件的相互转换(支持json多选版) 目的&#xff1a;编码与语言对应&#xff0c;方便大家使用 页面设计&#xff1a; 介绍&#xff1a; 1.选择文件栏目选择想要转换的文件 2.生成路径是转换后文件所在目录 3.小方框勾选与不勾选分别代表exl到…...

后台管理权限自定义按钮指令v-hasPermi

第一步:在src下面建立一个自定义指令文件,放自定义指令方法 permission.js文件: /*** v-hasPermi 操作权限处理*/import store from "/store";export default {inserted(el, binding) {const { value } binding;//从仓库里面获取到后台给的数组const permission s…...

【Python绘制散点图并添加趋势线和公式以及相关系数和RMSE】

在Python中&#xff0c;绘制散点图并添加趋势线&#xff08;通常是线性回归线&#xff09;、公式、以及相关系数&#xff08;Pearson Correlation Coefficient&#xff09;和均方根误差&#xff08;RMSE&#xff09;可以通过结合matplotlib用于绘图&#xff0c;numpy用于数学运…...

linux bridge VLAN

TP-Link 支持 Linux 桥接&#xff08;bridge&#xff09;和 VLAN 功能的产品主要包括其高端的交换机和一些企业级路由器&#xff1a; TP-Link JetStream 系列交换机&#xff1a; TL-SG3424: 24端口千兆交换机&#xff0c;支持 VLAN 和桥接。TL-SG3210: 24端口千兆管理型交换机&…...

Java进阶篇之深入理解多态的概念与应用

引言 在Java面向对象编程&#xff08;OOP&#xff09;中&#xff0c;多态&#xff08;Polymorphism&#xff09;是一个关键概念&#xff0c;它允许相同类型的对象在不同的场景中表现出不同的行为。多态不仅增强了代码的灵活性和可扩展性&#xff0c;还极大地提高了代码的可维护…...

Linux下的进程调度队列

我们在进程那一篇讲到了操作系统时间片轮换调度的概念 那么Linux下具体是怎么调度的&#xff1f;...

统计回归与Matlab软件实现上(一元多元线性回归模型)

引言 关于数学建模的基本方法 机理驱动 由于客观事物内部规律的复杂及人们认识程度的限制&#xff0c;无法得到内在因果关系&#xff0c;建立合乎机理规律的数学模型数据驱动 直接从数据出发&#xff0c;找到隐含在数据背后的最佳模型&#xff0c;是数学模型建立的另一大思路…...

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

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

随机生成 UUID

1、随机生成 UUID主方法 /*** 随机生成 UUID* param {*} len 生成字符串的长度* param {*} radix 生成随机字符串的长度**/export function uuid_(len 30, radix 20) {var chars 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.split()var uuid [],ir…...

报名表EXCEL图片批量下载源码-CyberWinApp-SAAS 本地化及未来之窗行业应用跨平台架构

每次报名表都会包含大量照片&#xff0c;一张一张下载很慢 可以通过未来之窗开源平台架构 开开excel批量下载 实现代码也很简单 function 未来之窗下载(){ let 未来之窗地址 document.getElementById("batchurl").value; let 保存路径 document.getElementById(…...

SpringBoot 整合 Elasticsearch 实现商品搜索

一、Spring Data Elasticsearch Spring Data Elasticsearch 简介 Spring Data Elasticsearch是Spring提供的一种以Spring Data风格来操作数据存储的方式&#xff0c;它可以避免编写大量的样板代码。 常用注解 常用注解说明如下&#xff1a; 注解名称 作用 参数说明 Docu…...

计算机毕业设计 助农产品采购平台 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…...

3步解锁ZTE ONU工厂模式:高效实用的网络设备管理完整指南

3步解锁ZTE ONU工厂模式&#xff1a;高效实用的网络设备管理完整指南 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu 你是否曾经面对ZTE ONU设备的管理界面感到束手无策&#xff1f;想…...

精密五金结构件配套

一、我们能为机器人行业提供什么&#xff1f;专注机器人非核心精密五金结构件配套&#xff0c;面向&#xff1a;工业机器人&#xff5c;协作机器人&#xff5c;人形机器人&#xff5c;AGV/AMR&#xff5c;末端执行器&#xff5c;减速器 / 伺服 / 模组&#xff5c;自动化集成工作…...

从图像处理到推荐系统:特征值不等式在工程中的5个妙用

从图像处理到推荐系统&#xff1a;特征值不等式在工程中的5个妙用 在工程实践中&#xff0c;数学工具往往能带来意想不到的优化效果。特征值不等式作为线性代数中的重要结论&#xff0c;其应用范围远超理论推导&#xff0c;能解决图像处理、推荐系统等多个领域的实际问题。本文…...

土地利用变化分析实战:用Python处理40年CNLUCC数据集

土地利用变化分析实战&#xff1a;用Python处理40年CNLUCC数据集 1972年至今的中国土地利用变化数据&#xff0c;如同一部记录国土变迁的"生态相册"。对于区域规划师、生态研究者而言&#xff0c;这套CNLUCC数据集的价值不亚于考古学家手中的碳14检测仪。本文将带您用…...

Typora风格文档化:使用Markdown实时记录PyTorch 2.8实验过程

Typora风格文档化&#xff1a;使用Markdown实时记录PyTorch 2.8实验过程 1. 为什么需要实验过程文档化 在深度学习研究领域&#xff0c;实验过程的可复现性一直是个老大难问题。很多研究者都有这样的经历&#xff1a;三个月前跑的实验&#xff0c;现在想复现结果&#xff0c;…...

opencode令牌分析插件使用:API调用监控部署教程

opencode令牌分析插件使用&#xff1a;API调用监控部署教程 1. 引言&#xff1a;为什么需要API调用监控&#xff1f; 当你使用AI编程助手时&#xff0c;是否曾经遇到过这些问题&#xff1a;不知道模型调用了多少次API、不清楚每次调用消耗了多少token、无法监控API调用的性能…...

2026 年电子邮件认证部署缺陷与安全风险治理研究

摘要 电子邮件作为网络攻击最主要入口&#xff0c;域名伪造与商业邮件欺诈&#xff08;BEC&#xff09;持续威胁机构安全。SPF、DKIM、DMARC 作为抵御邮件伪造的核心协议已提出十余年&#xff0c;但大量组织仍存在认知不足、配置错误、长期停留在监控模式等问题&#xff0c;导致…...

Java车载HMI卡顿问题终极解析,GPU渲染线程阻塞+Binder调用链路断点调试(附AS+ADB定制脚本)

第一章&#xff1a;Java车载HMI卡顿问题的系统性认知车载人机交互界面&#xff08;HMI&#xff09;作为智能座舱的核心入口&#xff0c;其响应流畅度直接影响用户安全与体验。当基于Java&#xff08;如Android Automotive OS或定制JVM嵌入式框架&#xff09;构建的HMI出现卡顿&…...

Qwen3.5-9B-AWQ-4bit惊艳效果展示:高清图识+中文摘要真实生成作品集

Qwen3.5-9B-AWQ-4bit惊艳效果展示&#xff1a;高清图识中文摘要真实生成作品集 1. 模型能力概览 Qwen3.5-9B-AWQ-4bit是一款让人眼前一亮的视觉理解模型&#xff0c;它能像人类一样"看懂"图片内容&#xff0c;并用流畅的中文给出专业分析。这个模型特别擅长处理各种…...

航空安全报告分析:UAE-Large-V1的事件分类与风险评估应用

航空安全报告分析&#xff1a;UAE-Large-V1的事件分类与风险评估应用 【免费下载链接】UAE-Large-V1 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/UAE-Large-V1 UAE-Large-V1作为一款先进的通用英文句子嵌入模型&#xff0c;在航空安全领域展现出强大的事…...