• JavaFx-初识


    JavaFx-初识

    JavaFX技术介绍

    JavaFX 是一个 Java 库,用于开发桌面应用程序以及富 Internet 应用程序 (RIA)。在 JavaFX 中构建的应用程序可以在多个平台上运行,包括 Web、移动和桌面。

    JavaFX 旨在取代 Java 应用程序中的 swing 作为 GUI 框架。但是,它提供了比摆动更多的功能。与 Swing 一样,JavaFX 也提供自己的组件并且不依赖于操作系统。它是轻量级和硬件加速的。它支持各种操作系统,包括 Windows、Linux 和 Mac OS。

    JavaFX的历史

    JavaFX 是由 Chris Oliver 开发的。最初,该项目被命名为Form Follows Functions (F3)。它旨在为 GUI 应用程序开发提供更丰富的功能。后来,Sun Micro-systems于 2005 年 6 月收购了 F3 项目作为JavaFX。

    Sun Micro-systems 于2007 年在W3 大会上正式宣布。2008 年 10 月,JavaFX 1.0 发布。2009年,ORACLE公司收购Sun Micro-Systems并发布JavaFX 1.2。JavaFX 的最新版本是 JavaFX 1.8,它于 2014 年 3 月 18 日发布。

    JavaFX的特点

    特点描述
    Java 库它是一个 Java 库,由许多用 Java 编写的类和接口组成。
    FXMLFXML 是基于 XML 的声明性标记语言。编码可以在 FXML 中完成,以向用户提供更增强的 GUI。
    Scene BuilderScene Builder 生成可移植到 IDE 的 FXML 标记。
    网页视图网页可以嵌入 JavaFX 应用程序。Web View 使用 WebKitHTML 技术嵌入网页。
    内置 UI 控件JavaFX 包含不依赖于操作系统的内置组件。UI 组件足以开发一个功能齐全的应用程序。
    类似 CSS 的样式JavaFX 代码可以嵌入 CSS 以改进应用程序的样式。我们可以通过简单的 CSS 知识来增强应用程序的视图。
    Swing 互操作性JavaFX 应用程序可以使用 Swing Node 类嵌入 Swing 代码。我们可以使用 JavaFX 的强大功能更新现有的 Swing 应用程序。
    Canvas APICanvas API 提供了在 JavaFX 场景区域中直接绘制的方法。
    丰富的 API 集JavaFX 提供了一组丰富的 API 来开发 GUI 应用程序。
    集成图形库提供了一组集成的类来处理 2D 和 3D 图形。
    图形管道JavaFX 图形基于图形渲染管道(棱镜)。它提供了硬件加速的流畅图形。
    高性能媒体引擎媒体管道支持以低延迟播放网络多媒体。它基于 Gstreamer 多媒体框架。
    自包含的应用程序部署模型自包含应用程序包具有所有应用程序资源以及 Java 和 JavaFX 运行时的私有副本。

    JavaFX 公共API

    JavaFX 架构的顶层包含一个 JavaFX 公共 API,它提供负责执行全功能 JavaFX 应用程序的所有必要类。该 API 的所有包列表如下。

    包名描述
    javafx.animation提供一组负责基于过渡的动画的类
    javafx.application提供应用程序生命周期方法
    javafx.collections提供可以处理集合和相关实用程序的类
    javafx.concurrent提供负责多任务处理的类
    javafx.embed.swing提供可以在swing代码中使用的一组类
    javafx.embed.swt提供可以在 swt 代码中使用的一组类
    javafx.event提供处理事件及其处理的类
    javafx.fxml包含负责从标记加载层次结构的一组类
    javafx.geometry提供包含在对象上操作 2D 几何体的方法的 2D 类。
    javafx.scene提供处理场景图 API 的类
    javafx.scene.canvas提供处理画布的一组类。
    javafx.scene.control包含所有 JavaFX 组件的类。
    javafx.scene.effect包含将图形效果应用于场景图节点的一组类
    javafx.scene.image提供一组用于加载和显示图像的类
    javafx.scene.input为鼠标和键盘事件提供一组类
    javafx.scene.layout提供一组类以支持用户界面布局
    javafx.scene.media提供将音频和视频集成到 JavaFX 应用程序中的一组类
    javafx.scene.paint提供一组颜色和渐变类,以在渲染场景图时填充形状和背景。
    javafx.scene.shape提供对与 2D 几何相关的对象执行操作的一组 2D 类。
    javafx.scene.text为字体和呈现文本节点提供一组类。
    javafx.scene.transform提供用于对对象执行旋转、缩放、剪切操作的一组类。
    javafx.scene.web提供加载和显示 Web 内容的方法。
    javafx.stage为 JavaFX 内容提供顶级容器类。
    javafx.util提供实用程序类
    javafx.util.converter此包用于 JavaFX 的标准字符串转换器

    官方的API文档说明: https://openjfx.cn/javadoc/17/

    场景图

    它是构建 JavaFX 应用程序的起点。它是一个分层的节点树,代表用户界面的所有视觉元素。它还具有处理事件的能力。一般来说,场景图可以定义为节点的集合。

    每个节点都有其单独的 id、样式和音量。场景图的每个节点只能有一个父节点和零个或多个子节点。

    场景图上的所有实现实际上都应用于其节点。它们是**javafx.scene **包中存在的各种类,用于在节点上创建、修改和应用一些转换。稍后我们将详细讨论场景图。

    图形引擎

    JavaFX 图形引擎为场景图提供图形支持。它基本上支持 2D 和 3D 图形。当系统上的图形硬件无法支持硬件加速渲染时,它会提供软件渲染。

    JavaFX 中的两个图形加速管道是:

    棱镜

    棱镜可以看作是高性能硬件加速图形管道。它具有渲染 2D 和 3D 图形的能力。Prism 实现了在不同平台上呈现图形的不同方式。

    • Windows XP 或 vista 上的 DirectX 9
    • Windows 7 上的 DirectX 11
    • Mac、Linux 和嵌入式上的 OpenGL
    • 无法进行硬件加速时的 Java 2D

    量子工具包

    Quantum Tool Kit 用于将棱镜和玻璃窗工具套件绑定在一起,并使它们可用于堆栈中的上述层。

    Glass Window工具包

    它位于 JavaFX 图形堆栈的最低级别。它基本上可以看作是一个平台相关层,作为 JavaFX 平台和本机操作系统之间的接口。

    它负责提供操作系统服务,例如管理窗口、定时器、事件队列和表面。

    网页视图

    我们还可以将 HTML 内容嵌入到 JavaFX 场景图中。为此,JavaFX 使用了一个名为 Web 视图的组件。Web 视图使用 web kit,它是一个内部开源浏览器,可以渲染 HTM5、DOM、CSS、SVG 和 JavaScript。

    使用 Web 视图,我们可以从 JavaFX 应用程序渲染 HTML 内容,并将一些 CSS 样式应用到用户界面。那么我们写出来的ui就会非常的漂亮了,不次于主流的GUI语言了

    媒体引擎

    通过使用媒体引擎,JavaFX 应用程序可以支持音频和视频媒体文件的播放。JavaFX 媒体引擎依赖于称为 G Streamer 的开源引擎。包javafx.scene.media包含可以为 JavaFX 应用程序提供媒体功能的所有类和接口。

    应用程序结构

    在这里插入图片描述

    JavaFX 应用程序按层次划分为三个主要组件,即Stage、Scene 和Nodes。我们需要在每个 JavaFX 应用程序中导入javafx.application.Application类。这为 JavaFX 应用程序提供了以下生命周期方法。

    • public void init()
    • public abstract void start(Stage stage)
    • public void stop()

    为了创建一个基本的 JavaFX 应用程序,我们需要:

    1. javafx.application.Application导入我们的代码。
    2. Application继承到我们的类中。
    3. 覆盖Application类的**start()**方法。

    Stage(阶段)

    JavaFX 应用程序中的Stage类似于Swing 应用程序中的Frame。它充当所有 JavaFX 对象的容器。Primary Stage 由平台内部创建。应用程序可以进一步创建其他阶段。初级阶段的对象传递给start方法。我们需要在初级阶段对象上调用show方法以显示我们的初级阶段。最初,初级阶段如下所示。

    在这里插入图片描述

    但是,我们可以向这个初级阶段添加各种对象。对象只能以分层方式添加,即首先将场景图(Scene)将添加到这个Stage,然后该场景图可能包含节点。节点可以是用户界面的任何对象,如文本区域、按钮、形状、媒体等。

    Scene(场景)

    Scene场景实际上包含 JavaFX 应用程序的所有物理内容(节点)。Javafx.scene.Scene类提供了处理场景对象的所有方法。为了使舞台上的内容可视化,创建场景是必要的

    Scene Graph(场景图)

    Scene Graph场景图存在于层次结构的最低级别。它可以看作是各种节点的集合。节点是在舞台上可视化的元素。它可以是任何按钮、文本框、布局、图像、单选按钮、复选框等。

    节点以树状结构实现。场景图中总是有一个根。这将充当场景图中存在的所有其他节点的父节点。但是,此节点可以是 JavaFX 系统中可用的任何布局。

    叶节点存在于树层次结构中的最低级别。场景图中的每个节点都代表javafx.scene包的类,因此我们需要将包导入到我们的应用程序中,以创建一个功能齐全的 javafx 应用程序。

    在这里插入图片描述

    入门demo

    自己创一个TestDemo的java文件然后运行注意看下面的注释

    package com.example.javafxdemo;
    
    import javafx.application.Application;
    import javafx.event.ActionEvent;
    import javafx.event.EventHandler;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.layout.StackPane;
    import javafx.stage.Stage;
    
    public class TestDemo extends Application {
    
        /**
         * 程序入口
         *
         * @param stage 窗口
         * @throws Exception
         */
        @Override
        public void start(Stage stage) throws Exception {
            // 创建一个按钮
            Button btn1 = new Button("Say, Hello World");
            // 创建一个按钮的点击事件回调
            btn1.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent arg0) {
                    System.out.println("hello world");
                }
            });
            // 创建一个栈面板
            StackPane root=new StackPane();
            root.setMinHeight(300);//设置最小高度
            root.setMinWidth(300);//设置最小宽度
            root.getChildren().add(btn1);//将按钮添加到栈面板中,默认居中
            Scene scene=new Scene(root);//创建一个场景,将栈面板添加到场景中
            stage.setScene(scene);//将场景添加到舞台中
            stage.setTitle("第一个JavaFX程序");//设置舞台标题
            stage.show();//显示舞台
        }
    
        public static void main(String[] args) {
            launch(args);//启动程序
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    在这里插入图片描述

    当点击中的按钮后,就会触发按钮的回调然后在控制台中打印

    在这里插入图片描述

    点赞 -收藏-关注-便于以后复习和收到最新内容
    有其他问题在评论区讨论-或者私信我-收到会在第一时间回复
    在本博客学习的技术不得以任何方式直接或者间接的从事违反中华人民共和国法律,内容仅供学习、交流与参考
    免责声明:本文部分素材来源于网络,版权归原创者所有,如存在文章/图片/音视频等使用不当的情况,请随时私信联系我、以迅速采取适当措施,避免给双方造成不必要的经济损失。
    感谢,配合,希望我的努力对你有帮助^_^
  • 相关阅读:
    python+vue+nodejs校园通教室自习室预约系统
    【云原生之kubernetes实战】在k8s集群下helm工具的安装与使用
    【Python】排序指北
    【目标检测】YOLOv5模型从大变小,发生了什么?
    《C++ Primer plus 》第六章:分支语句和逻辑运算符
    C++前缀和算法:生成数组原理、源码及测试用例
    IIS perl python cbrother php脚本语言配置及简单测试样例程序
    Django路由层和视图层
    K3S 系列文章-5G IoT 网关设备 POD 访问报错 DNS 'i/o timeout'分析与解决
    docker 启动容器
  • 原文地址:https://blog.csdn.net/weixin_45203607/article/details/127691654