JavaFX学习教程二

一、JavaFX 体系结构

JavaFX 场景图(Scene Graph)是构建 JavaFX 应用程序的起点,一种树状数据结构,用于排列(和分组)图形对象,以便于逻辑表示。

stage:舞台,操作系统窗口的 JavaFX 表示,是所有节点的容器,是根节点

node:节点,场景图中的单个元素被称为节点,每个节点都有ID、样式类、边界体积。(Each node has an ID, style class, and bounding volume)

它还具有以下:

  • Effects, such as blurs and shadows模糊或者阴影效果

  • Opacity不透明度

  • Transforms变换(位置、缩放、旋转)

  • Event handlers (such as mouse, key and input method)事件处理、键鼠输入

  • An application-specific state

JavaFX 场景图除了包含控件、布局容器、图像和媒体外,还包括图形基元(如矩形和文本)。

一般来说JavaFX程序结构可以理解为:舞台-》场景-》布局-》控件

以上图片的代码实现如下:

public class HelloApp extends Application {@Overridepublic void start(Stage stage) throws Exception {Text text = new Text("Hello World")//文本控件HBOX hbox =new HBOX();//横向布局hbox.getchildren().add(text);//布局添加控件stage.setScene(new Scene(hbox, 300, 300);//新建场景,添加布局stage.show();//舞台展示场景}public static void main(String[] args) {launch(args);}
}

二、FXML文件

FXML 是一种可编写脚本的、基于 XML 的标记语言,用于构造 Java 对象图。它为在过程代码中构造此类图形提供了一种方便的替代方法,并且非常适合于定义 JavaFX 应用程序的用户界面,因为 XML 文档的层次结构与 JavaFX 场景图的结构非常相似。

FXML是一种以XML(Extensible Markup Language)的格式表示JavaFX界面对象的文件,FXML文件中的每一个元素可以映射到JavaFX中的一个类,每个FXML元素的属性或者其子元素都可以映射为该对应JavaFXML类的属性的文件,可以理解为界面的代码表现形式

可以通过使用FXML简化JavaFX 应用程序的开发

In FXML, an XML element represents one of the following: XML元素有以下:

  • A class instance 实例类
  • A property of a class instance 实例类属性
  • A "static" property 静态属性
  • A "define" block 定义块
  • A block of script code 脚本代码块

三、Controller类文件 

用来绑定这个fxml文件用的,用于控制这个界面的一些操作,实现一些功能,这和我们开发web项目的时候的controller含义基本相同。

四、Scene Builder 

JavaFX Scene Builder 是一种可视化布局工具,可让用户快速设计 JavaFX 应用程序用户界面,而无需编码。用户可以将 UI 组件拖放到工作区、修改其属性、应用样式表,并且他们正在创建的布局的 FXML 代码将在后台自动生成。结果是一个 FXML 文件,然后可以通过将 UI 绑定到应用程序的逻辑来与 Java 项目结合。

这个软件的作用就是将我们拖拽产生的界面UI生成对应的前端代码这样一来,后台逻辑我们可以利用Java来写,前台页面可以利用Scene Builder自动生成。

下载地址:Scene Builder - Gluon (gluonhq.com)

五、利用SceneBuilder设计界面实例

入门可以参考官方给出的教程第 II 部分:使用 Scene Builder 构建 JavaFX 应用程序(发行版 2) (oracle.com)

SceneBuilder软件详细说明可参考

JavaFX_二木成林的博客-CSDN博客

我这边以设计登录界面为例

截图如下:

层次结构截图如下:

当设计完界面之后需要

1)设置重要控件的fx:id

2)设置重要控件的触发事件

3)绑定控制类

4)查看

设置重要控件的fx:id

在JavaFX中,fx:id是一个属性,用于将FXML文件中的UI组件与Java控制器类中的成员变量进行绑定。通过这种绑定,可以在控制器类中直接访问和操作FXML文件中的UI组件。

选中控件,可以在监控器界面的Code这里,看到fx:id,点击之后可以进行设置。

设置重要控件的触发事件

例如给登录按钮设置点击触发的登录功能,需要在上图的code这一栏中的On Action绑定Login事件,而这个事件的执行流程会在控制类中实现。

On Action属性用于将UI组件的用户操作与事件处理逻辑关联起来,提供了一种方便的方法来响应用户交互。在FXML文件中通过属性直接指定处理方法

在控制类中写Login方法时,需要被注解 @FXML 标记,表明它是一个FXML文件中的控件事件处理方法。当用户点击按钮时,JavaFX 应用程序会自动调用该方法。

即如下:

绑定控制类

为了使设计页面能执行编程逻辑需要与Controller类进行绑定

在下图的位置填入java项目中类的位置即可。

在软件中,也可以直接获取controller代码,view->Show Sample Controller Skeleton就可以复制对应的controller代码

六、创建项目

参考:超详细的JavaFX项目的创建、构建、打包教程_javafx教程-CSDN博客

因为JDK8中集成了JavaFX,所以在JDK8环境下创建JavaFX程序很简单。只需像创建普通Java项目一样创建项目,在代码中导入JavaFX相关包即可编写并直接运行即可运行JavaFX程序。

Java 8+:

在JDK8后的JDK版本不再集成JavaFX,我们需要自己向项目中引入JavaFX,所以创建JavaFX项目会复杂一些。

我们此处采用创建Maven或Gradle项目并引入依赖的办法来引入JavaFX。如果不使用Maven,也可以在Project Structure中通过给项目添加依赖的方式,来使用和运行JavaFX程序。但是此种方式不利于管理项目,在后续打包过程中也会遇到许多困难与问题,所以不推荐。

pom.xml需要添加openjfx的依赖和插件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>WrapSystem</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.18</version></dependency><dependency><groupId>org.openjfx</groupId><artifactId>javafx-controls</artifactId><version>17.0.0.1</version></dependency><dependency><groupId>org.openjfx</groupId><artifactId>javafx-fxml</artifactId><version>17.0.0.1</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.10.1</version><configuration><source>11</source><target>11</target></configuration></plugin><plugin><groupId>org.openjfx</groupId><artifactId>javafx-maven-plugin</artifactId><version>0.0.8</version><executions><execution><!-- Default configuration for running with: mvn clean javafx:run --><id>default-cli</id><configuration><mainClass>main</mainClass><launcher>app</launcher><jlinkZipName>app</jlinkZipName><jlinkImageName>app</jlinkImageName><noManPages>true</noManPages><stripDebug>true</stripDebug><noHeaderFiles>true</noHeaderFiles></configuration></execution></executions></plugin></plugins></build>
</project>

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

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

相关文章

Nodejs+Socket.io+Web端完成聊天

前言 源码获取:nodeexpresssocket.ioweb: 聊天demo (gitee.com) 目录结构 后端依赖 启动方式 前端是html正常启动 后端是node app.js 后端app.js核心代码 const express require(express) const app express() var http require(http).Server(app) var io require(so…

掌握C++回调:按值捕获、按引用捕获与弱引用

文章目录 一、按引用捕获和按值捕获1.1 原理1.2 案例 二、弱引用2.1 原理2.2 案例一2.3 案例二&#xff1a;使用base库的弱引用 三、总结 在C回调中&#xff0c;当使用Lambda表达式捕获外部变量时&#xff0c;有两种捕获方式&#xff1a;按值捕获和按引用捕获。 一、按引用捕获…

Matlab自学笔记三十:元胞数组的修改、添加、删除和连接

1.说明 元胞数组的子数组或元素也是元胞型的&#xff0c;其元素内容&#xff08;值&#xff09;是本身类型&#xff0c;因此&#xff0c;在添、删、改和连接处理时&#xff0c;必须明确每个元素的值的类型和大小&#xff0c;否则&#xff0c;编程报错是不可避免的了。看本文前…

Python 点云裁剪

点云裁剪 一、介绍1.1 概念1.2 函数讲解二、代码示例2.1 代码实现2.2 代码讲解三、结果示例一、介绍 1.1 概念 点云裁剪 :根据待裁剪对象的多边形体积(json文件)实现点云的裁剪。 1.2 函数讲解 下面代码示例中主要用到了两个函数。 读取待裁剪对象的多边形体积信息(json文…

浅谈C++函数

目录 一、函数的概念二、调用函数的两个前提三、函数传参的三种形式四、函数返回类型 一、函数的概念 函数是C程序的基本模块&#xff0c;通常一个C程序由一个或多个函数组成。函数可以完成用户指定的任务&#xff0c;一般分为库函数和用户自定义的函数。函数由函数头和函数体…

先进制造aps专题六 aps软件开发最大的难点,设备甘特图开发

aps软件开发最大的难点&#xff0c;设备甘特图开发 一般认为&#xff0c;aps软开发中&#xff0c;算法是难的&#xff0c;排程算法难&#xff0c;优化算法更难&#xff0c;但其实最大的难点是设备甘特图开发 aps软件设备甘特图开发的几个难点如下 1 和项目甘特图一行显示一个…

02. Flink 快速上手

02. Flink 快速上手 1、创建项目导入依赖 pom文件&#xff1a; <properties><flink.version>1.17.0</flink.version> </properties><dependency><groupId>org.apache.flink</groupId><artifactId>flink-streaming-java<…

k8s配置pods滚动发布

背景 采用微服务架构部署的应用&#xff0c;部署方式都要用到容器化部署k8s容器编排&#xff0c;最近我在公司负载的系统也是用的上述架构部署&#xff0c;但是随着系统的运行&#xff0c;用户提的需求就会越多&#xff0c;每次更新的话都要停机发布&#xff0c;最用户侧来说就…

【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;C语言刷题系列 目录 一、问题描述 二、解题思路 解题思路&#xff1a; 解题步骤: 三、C语言代码实现及测试 一、问题描述 给定一…

指北者智能音乐学习机隆重亮相广州国际乐器展

2024年5月23-26日广州国际乐器展览会在广交会展馆B区隆重开幕&#xff0c;本届展会开设5大展厅、50000平方米的主题展区&#xff0c;吸引了700多家国内外参展商参展&#xff0c;打造集展示、商贸、文化交流、文娱于一体的广阔平台。深圳市指北科技有限公司也携旗下品牌指北者智…

AWS云服务器每月费用高昂,如何优化达到节省目的?

AWS云服务器每月费用可能因不同的使用情况和配置而有所不同。为了优化并节省AWS云服务器的费用&#xff0c;aws的合作伙伴九河云提供了一些建议&#xff1a; &#xff08;1&#xff09;调整实例大小&#xff1a;确保你使用的实例大小与你的工作负载相匹配。实例的容量每增加一倍…

Gopeed的高级用法

Gopeed是一个开源全平台下载器&#xff0c;具体简介请参考&#xff1a; “狗屁下载器”&#xff1f;Gopeed - 开源全平台下载器 (免费轻量 / 比 Aria2 好用 / 远程下载) - 异次元软件世界 (iplaysoft.com) 这里主要介绍下自己摸索出来的 Gopeed 的高级做法。 有的网站添加的…

时政|医疗结果互认

背景&#xff08;存在的问题&#xff09; 看同一种病&#xff0c;换一家医院甚至换一个院区、换一个科室&#xff0c;检查检验还得再来一遍&#xff0c;费钱又费时。开展检查检验结果互认&#xff0c;可以明显减轻患者就医负担。患者不用做重复检查&#xff0c;也可节约就医时…

基于JSP/Servlet校园二手交易平台(二)

目录 2 开发技术及开发环境 2.1 Java语言简介 2.2 J2EE技术介绍 2.3 Servlet/JSP技术 2.4 MVC 简介 2.5 Struts 技术 2.6 Hibernate 技术 2.6.1 应用程序的分层体系结构 2.6.2 Hibernate的应用及API简介 2.7 开发环境及环境配置 2.7.1 Java/JSP系统环境 2.7.2 JSP环…

D365 SysDictTable\SysDictField

文章目录 前言一、示例 前言 SysDictField 和 SysDictTable 用于访问表和字段的元数据信息。 一、示例 循环表&#xff0c;使对应数据源的字段禁止编辑 public void fieldNoAllowEdit(Common _common,formDataSource fds,boolean aE false){TableId tab…

小程序-购物车-基于SKU电商规格组件实现

SKU 概念&#xff1a; 存货单位&#xff08; Stock Keeping Unit &#xff09;&#xff0c; 库存 管理的最小可用单元&#xff0c;通常称为“单品”。 SKU 常见于电商领域&#xff0c;对于前端工程师而言&#xff0c;更多关注 SKU 算法 &#xff0c;基于后端的 SKU 数据…

(二)vForm 动态表单设计器之下拉、选择

系列文章目录 &#xff08;一&#xff09;vForm 动态表单设计器之使用 目录 系列文章目录 前言 一、后端需提供接口 二、组件配置 总结 前言 动态表单下拉、选择等组件&#xff0c;大概率要使用数据库中的数据&#xff0c;那么vForm如何拿到数据库中的数据呢&#xff1f;跟随…

僵尸进程、孤儿进程、守护进程

【一】僵尸进程和孤儿进程 【1】引入 我们知道在unix/linux中&#xff0c;正常情况下&#xff0c;子进程是通过父进程创建的&#xff0c;子进程在创建新的进程。 子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它…

动物合并消除休闲游戏源码 Animal Merge 益智游戏

一款动物合并消除休闲游戏源码&#xff0c;Animal Merge是一款引人入胜的益智游戏&#xff0c;玩家的任务是合并方块&#xff0c;创造出可爱的动物&#xff0c;这些动物的体型会逐渐变大。游戏玩法包括将方块放到网格上&#xff0c;并战略性地将它们合并以形成更大的动物形状。…

作文笔记9 描写方法

动态描写&#xff1a; 威尼斯小艇&#xff0c;窗外的风景飞快的后退。 静态描写&#xff1a; 牧场之国&#xff0c;牛不再哞哞&#xff0c;马忘记了踢马房的挡板。 动静结合&#xff1a; 火车进站&#xff0c;人声鼎沸&#xff0c;叫卖声&#xff0c;广播声&#xff0c;人…