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 {
    @Override
    public 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>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络编程的基础知识(适合新手)

网络编程 在Java中&#xff0c;网络编程是指使用Java语言进行网络通信的编程技术。这种技术使得位于不同地理位置的计算机能够通过网络进行通信&#xff0c;实现资源共享和信息传递。 一、定义 Java网络编程是Java语言在网络通信方面的应用&#xff0c;它利用Java提供的网络…

恢复Android数据的综合指南:适用于Android的数据恢复工具

随着存储空间的快速增长&#xff0c;智能手机已成为我们最可靠的个人数据库。我们的 Android 手机不亚于我们自己的延伸&#xff0c;包含各种重要文件、照片、文档、视频、联系人、通话记录等等。由于这些智能 Android 设备上存储了如此多有价值的信息&#xff0c;意外删除或丢…

Java进阶学习笔记22——泛型方法、通配符和上下限

泛型方法&#xff1a; package cn.ensource.d11_generics_method;public class Test {public static void main(String[] args) {// 泛型方法String res test("Java");System.out.println(res);Dog dog1 test(new Dog());System.out.println(dog1);}// 泛型方法pub…

常用API(正则表达式、爬取、捕获分组和非捕获分组 )

1、正则表达式 练习——先爽一下正则表达式 正则表达式可以校验字符串是否满足一定的规则&#xff0c;并用来校验数据格式的合法性。 需求&#xff1a;假如现在要求校验一个qq号码是否正确。 规则&#xff1a;6位及20位之内&#xff0c;0不能在开头&#xff0c;必须全部是数字…

一文了解 - GPS/DR组合定位技术

GPS Global Position System 全球定位系统这个大家都很熟悉&#xff0c; 不做太多介绍。 DR Dead Reckoning 车辆推算定位法&#xff0c; 一种常用的辅助的车辆定位技术。 DR系统的优点&#xff1a; 不需要发射和接收信号&#xff1b; 不受电磁波干扰。 DR系统的缺点&#x…

SVM兵王问题

1.流程 前面六个就是棋子的位置&#xff0c;draw就是逼和&#xff0c;后面的数字six就代表&#xff0c;白棋最少用六步就能将死对方。然后呢&#xff0c;可以看一下最后一个有几种情况&#xff1a; 2.交叉测试 leave one out&#xff1a; 留一个样本作测试集&#xff0c;其余…

精品PPT | 精益生产管理中MES系统的实现与应用(免费下载)

【1】关注本公众号&#xff0c;转发当前文章到微信朋友圈 【2】私信发送 MES系统的实现与应用 【3】获取本方案PDF下载链接&#xff0c;直接下载即可。 如需下载本方案PPT/WORD原格式&#xff0c;请加入微信扫描以下方案驿站知识星球&#xff0c;获取上万份PPT/WORD解决方案&…

深入理解 Spring Web 应用程序初始化流程

前言 在构建基于 Spring 的 Web 应用程序时&#xff0c;了解初始化流程是至关重要的。本文将详细介绍 Servlet 容器的初始化过程&#xff0c;并重点探讨 Spring 框架在其中的作用&#xff0c;特别是 ServletContainerInitializer、SpringServletContainerInitializer 和 WebAp…

2024年软考总结 信息系统管理师

选择题 英文题&#xff0c;我是一题也没把握&#xff0c;虽然我理解意思。 千万不要认为考死记硬背不对。目的不在于这。工程项目中有很多重要的数字&#xff0c;能记住说明你合格。 案例 几乎把答案全写在案例中了。 计算题 今年最简单。没有考成本。 只考了关键路径&a…

微信小程序毕业设计-智慧旅游平台系统项目开发实战(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

RAG技术综述

RAG的基本架构。&#xff0c;生成器和检索器。 参考paper&#xff1a;https://arxiv.org/html/2402.19473v4 文中将rag的内容从文本扩展至多模态&#xff0c;打开了思路。 生成器&#xff1a;transformer&#xff0c;LSTM&#xff0c;扩散模型&#xff0c;gan 检索器&#xf…

Sourcetree安装教程及使用

1 Sourcetree介绍 Sourcetree是一款免费的Git图形化客户端&#xff0c;它由Atlassian开发&#xff0c;提供了跨平台的支持&#xff0c;可运行在Windows和Mac操作系统上。Sourcetree可以让开发者更方便地使用Git来管理代码&#xff0c;不需要在命令行中输入复杂的Git命令&#x…

【强训笔记】day25

NO.1 思路&#xff1a;哈希质数判断。 代码实现&#xff1a; #include <iostream> #include<string> #include<cmath> using namespace std;bool isprime(int n) {if(n<2) return false;for(int i2;i<sqrt(n);i){if(n%i0) return false;}return true…

Python筑基之旅-运算符

目录 一、运算符 1、了解定义 2、理解意义 2-1、基本数据处理 2-2、条件判断 2-3、逻辑操作 2-4、赋值和更新 2-5、位操作 2-6、提高代码可读性 2-7、解决实际问题 2-8、学习其他编程语言的基础 3、探索方法 3-1、理解概念 3-2、练习基本运算 3-3、掌握优先级 …

ICML 2024 Mamba 论文总结

2024ICML&#xff08;International Conference on Machine Learning&#xff0c;国际机器学习会议&#xff09;在2024年7月21日-27日在奥地利维也纳举行 &#x1f31f;【紧跟前沿】“时空探索之旅”与你一起探索时空奥秘&#xff01;&#x1f680; 欢迎大家关注时空探索之旅 …

ciscn2024(上传一下,有侵权什么的问题的话联系删除)

Web Simple_php 这个Simple_php一点儿也不Simple (⋟﹏⋞) 源码放这儿了&#xff1a; <?phpini_set(open_basedir, /var/www/html/); error_reporting(0);if(isset($_POST[cmd])){$cmd escapeshellcmd($_POST[cmd]); if (!preg_match(/ls|dir|nl|nc|cat|tail|more|flag…

原生标签WebComponent

文章目录 介绍一、web Component二、怎么使用三、在Vue中使用使用场景 前端必备工具推荐网站(免费图床、API和ChatAI等实用工具): http://luckycola.com.cn/ 介绍 平常浏览各个网站过程中&#xff0c;经常遇到的一种现象&#xff1a;页面广告。 这种广告按照来源可分为两种&…

C++面向对象程序设计 - 输入和输出

程序的输入指的是文件将数据传送给程序&#xff0c;程序的输出指的是从程序将数据传送输出文件。 C的输入和和输出包括以下三个方面&#xff1a; 对系统指定的标准设备的输入和输出&#xff0c;即从键盘输入数据&#xff0c;输出到显示器屏幕。以外存磁盘&#xff08;或光盘、…

车道线识别与预警系统LDWS(代码+教程)

车道线识别与预警系统&#xff08;Lane Departure Warning System, LDWS&#xff09;作为智能交通系统中的重要组成部分&#xff0c;旨在通过先进的图像处理和计算机视觉技术&#xff0c;实时监测车辆行驶过程中的车道位置&#xff0c;预防因驾驶员疏忽或疲劳导致的车道偏离事故…

Flink 窗口

窗口&#xff08;Window&#xff09; 窗口是处理无限流的核心。 窗口将流分割成有限大小的“桶”&#xff0c;我们可以计算窗口中的数据。 窗口程序一般有键控流&#xff08;keyed streams&#xff09;的窗口程序 和 非键控流&#xff08;non-keyed streams&#xff09;的窗口…