openjfx(javaFX)介绍

基于JavaSE8,openjfx由几个组件构成:图形引擎Prism,窗体引擎glass,媒体引擎和一个web引擎。 欢迎大家积极开心的加入讨论群,群号:608423839(二群),556722677(三群),689672017(四群)

特性

FXML是一种基于XML的声明式标记语言,用于描述JavaFX应用程序的用户界面。设计师可以在FXML中编码或者使用JavaFX Scene Builder来交互式地设计图形用户接口(GUI)。Scene Builder所生成的FXML标记可以与IDE对接,这样开发者可以添加业务逻辑。类似安卓界面开发。它是一个使用了WebKitHTML技术的Web组件,可用于在JavaFX应用程序中嵌入Web页面。在WebView中运行的JavaScript可以方便地调用JavaAPI,并且JavaAPI也可以调用WebView中的JavaScript。与Swing互操作:现有的Swing程序可以通过JavaFX的新特性升级,例如多媒体播放和Web 内容嵌入。在JavaFX8中加入了SwingNode类,它可以将Swing内容嵌入到JavaFX程序中。内置的UI控件和CSS:JavaFX提供了开发一个全功能应用程序所需的所有主要控件。这些组件可以使用标准的Web技术如CSS来进行装饰。在JavaFX8中,DatePicker和TreeView UI控件是可用的,并且可以使用标准的Web技术如CSS来进行美化。Modena主题:在JavaFX8中,提供了新的Modena主题来替换原来的Caspian主题。不过在Application的start()方法中,可以通过加入setUserAgentStylesheet(STYLESHEET_CASPIAN)代码行来继续使用Caspian主题。(eguid原创文章,转载 请注明出处)3D图像处理能力:在JavaFX8中的3D图像处理API中加入了一些新的API,包括Shape3D (Box, Cylinder, MeshView和Sphere 子类),SubScene, Material, PickResult, LightBase (AmbientLight 和PointLight子类),SceneAntialiasing等。在本次发布中Camera类API也得到了更新。Canvas API:Canvas API允许在由一个图形元素(node)组成的JavaFX场景(Scene)的一个区域中直接绘图。Printing API:JavaFX 8中加入了print包并且提供了打印功能公共类。Rich Text支持:JavaFX提供了更为强大的文本支持能力,包括双向文字(例如阿拉伯语)、复杂文字脚本,例如Thai、Hindu文字,并且支持多行、多种风格的文本节点。多点触摸:基于底层平台的功能JavaFX提供了对多点触摸的支持。Hi-DPI支持:JavaFX 8现在支持Hi-DPI显示。图形渲染硬件加速:JavaFX图像均基于图形渲染流水线(Prism)。JavaFX提供更为平滑的图像并且在显卡或图像处理单元(Graphics processing unit,GPU)支持的情况下通过Prism来获得更快的渲染速度。如果GPU不支持对应的图形处理功能,则Prism会使用软件渲染方式来替代。高性能多媒体引擎:媒体流水线支持对Web媒体内容的播放。它提供了一个基于GStreamer多媒体框架的稳定、低延迟的多媒体处理框架。自包含的应用部署模型:自包含应用包具有应用所需的所有资源、包括一个Java和JavaFX运行时的私有拷贝。它们可作为操作系统原生安装包发布,并提供与原生应用相同的安装和运行体验。

架构

组件

javaFX基础(javaFX系列之launcher启动器:两种启动javaFX的方式及launch(args[])参数设置和获取)场景图(Scenen graph)图形系统(Graphics System)Glass窗体工具包(Glass window toolkit)多媒体和图形(media and images)web组件(web component)css样式UI控件(UI controls)布局(layout)视觉特效(visual effects)javaFX线程模型结构分析

场景图

Scene gragh是应用的入口,他是一个层级结构的节点树,可以处理输入,也可以被渲染。 场景图中的一个元素被称为节点,每个节点都包含一个id,样式类和包围盒(bounding volume)。除了根节点外,场景图中所有节点都有一个父节点,0或多个字节带你,节点包含以下特性:

效果(Effects),模糊和阴影不透明度(Opacity)变换(Transforms)事件处理器(Event handlers,鼠标、键盘和输入法)应用相关的状态(Application-specific state) 和Swing与AWT不同的是,场景图还包含矩形、文本、空间、布局容易、图像和多媒体。 javafx.scene api允许创建和定义各种内容,比如:节点(Nodes):形状(2d,3d)、图像、多媒体、内嵌web浏览器、文本、UI控件、图表、组和容器。状态(State):变换(节点定位和方向)、视觉效果、内容和其他视觉效果效果(Effects):可以改变场景图节点的外观,例如模糊、阴影和图像调整。

图形系统

图形系统支持2d和3d场景图,当系统中的硬件不支持时,将提供软件渲染(也就是cpu渲染)。

windows xp和vista上的directx 9windows 7上的directx 11mac、Linux、嵌入式设备上的OpenGL当硬件不支持时使用软件渲染(cpu渲染,内置在jre中)

Glass窗体工具包

Glass窗体工具包(Glass window toolkit)提供本地操作,例如:窗体、计时器、皮肤。它是JavaFX层与本地操作系统的平台无关层。它还负责管理事件队列,该事件队列与javaFX应用在同一个线程上。AWT中本地系统中的那部分代码运行在一个县城里,而Java部分运行在另外一个线程里,导致了很多问题,这些问题在javafx中得到了解决。

线程

javafx的程序和渲染线程是分开的,应用运行时会有两个或更多线程:

javafx应用程序线程(主线程,用于控制场景图,场景图只能由该线程来访问,所以嵌入swing会出现问题)prism渲染线程(用于处理渲染工作,与事件调度独立,使得渲染可以与程序并行,在上一帧被系统渲染时,线程可以并行的处理下一帧)多媒体线程(在后台运行,使用javafx应用程序线程在场景图中同步最近的帧,像素调度线程)

线程调度结构(eguid 原创 文章,-转载-请注明出处) 线程1 --> 线程2 --> 主线程 prism渲染 --> 多媒体线程(调度线程) --> 窗体\场景图

脉冲(Pulse)

脉冲是一个异步事件,用于异步通知场景图何时使用prism来同步场景图上元素的状态,一个脉冲被限制最多60帧/秒(fps),并且会在场景图上运行动画时被触发,即使动画没有运行,如果场景图中的内容发生改变,也会使脉冲被调度。 例如一个button位置被改变,脉冲就会被调度。layout和css也会触发脉冲调度,系统在每个脉冲之上会自动进行一次css和布局处理,来降低对系统性能的影响,场景图中的某个改变会导致很多布局和css的更新,这些更新会影响系统性能,可以根据需要在脉冲之前触发布局。 Glass windowtoolkit负责使用高分辨率的本地计时器来执行脉冲事件。

多媒体和图像

可以通过javafx.scene.media API来访问多媒体功能,支持视频和音频。格式支持mp3,aiff,wav和flv视频。 多媒体组件由三个:

Meida对象-表示一个多媒体文件MediaPlayer-用于播放文件MediaView-用于显示内容

web组件

web组件(Web component)是一个基于webkit的Javafx ui空间,提供了一个web viewer,并通过api提供了完全的浏览功能,支持全部浏览器功能:

渲染本地或这远程url的html内容支持历史记录、后退、前进导航内容重加载向web组件添加效果编辑html内容执行js脚本事件处理 这个嵌入式的浏览器组件由以下类组成:webEngine提供了基本的web页面浏览功能webview封装了webEngine对象,并将html整合到应用场景之中,并提供属性和方法来增加效果、变换。它是Node类的一个扩展。支持Java和js的互相调用

css

javafx支持层叠样式表(css),其提供了在不修改程序代码的情况下自定义应用程序外观的能力。css可以被添加到任何场景图中的节点之上,且这个过程时异步的。也支持在运行时添加css到场景中,这使得动态改变应用程序外观变得可行。

注意(eguid 原创 文章,【转载】请注明出处) javafx 的css时基于W3C CSS标准2.1版本,对3.0版本支持较少,只有少量的css3.0特性

UI控件

javafx UI控件可以通过javafx api来使用,这些控件通过场景图中的节点来构建。这些控件充分利用了javaFX平台丰富的视觉功能,并且支持多种操作系统。css可以对UI控件进行主题和风格控制。

布局

布局容器(Layout contaniner)或者面板(Pane)可以对javafx应用程序中的UI控件进行灵活、动态排布。 Layout api包含:

BorderPane类将其内容节点放到上、下、左、右、中各个区域中。HBox类将其内容节点横向排成一列。StackPane类将其内容节点摞在一起(可以用作游戏里的多层布局)GridPane类按行列来布局内容节点,类似bootstrapFlowPane类按内容行或列进行流式布局,当遇到横向或纵向的边界时自动进行换行或换列。TilePane类将其内容放到统一大小的单元格中。AnchorPane类可以创建锚节点,将控件停靠于布局的上下左右各边,也可以剧中停靠。 可以通过嵌套使用各类布局来灵活布局结构。

2d和3d变换

在javafx场景图中每个节点都可以使用下面的Javafx.scene.tranform的类来进行x-y坐标系变换。

translate - 将一个节点的xyz坐标系从一个位置移动到另一个。scale - 将一个节点在xyz总表系统根据缩放因子进行缩放。shear - 旋转一个坐标轴,这样x,y轴就不再是垂直的了。节点坐标值会过根据制定的背书进行变换。rotate - 根据scene中指定的一个支点对节点进行旋转。affine - 执行从一个2d/3d坐标系到另外一个2d/3d坐标系的线性映射,同时保留线条的‘straight’和‘parallel’属性。这个类应与Translate、scale、rotate、shear变换使用,一般不要直接使用。

视觉效果

在场景图中开发富客户端界面,包括使用视觉效果来美化程序的外观。javafx的视觉效果主要基于像素的图像,因此他们需要先获取场景图中节点渲染成图像,再将视觉效果添加上去。 提供下面的类来提供一些常用的视觉效果:

drop shadow - 应用视觉效果后将为给定的内容渲染一个阴影。reflection - 再真实的内容后面渲染一个反射倒影。lighting - 模仿一个光源的照射效果,使一个平面的对象看起来更真实、具有3d效果。

测试使用

测试使用每个功能实际效果

节点

Node:所有场景图节点的抽象基础类。Parent:所有分支节点的抽象基础类。(此类直接继承Node类)Scene:场景图中所有内容的基本容器类。

场景节点(Scene)

场景是所有内容的基本容器(eguid原创文章,转载请注明出处)

设置摄像机(Camera),用来设置可是范围填充颜色设置鼠标样式监听触摸、鼠标、键盘事件设置和获取当前场景参数

Scene.setUserData(Object obj);

Scene.getUserData();

java fxml教程_openjfx(javaFX)完整学习指南(教程)相关推荐

  1. openjfx(javaFX)完整学习指南(教程)

    openjfx(javaFX)介绍 基于JavaSE8,openjfx由几个组件构成:图形引擎Prism,窗体引擎glass,媒体引擎和一个web引擎. 欢迎大家积极开心的加入讨论群,群号:60842 ...

  2. Java 开发 (实习生/应届生) 完整学习路线和规划,希望能够帮到屏幕前迷茫的你

    这是来自一个没有团队,没有机构,仅仅是一个热爱Java开发的带学生UP主完成的学习路线,所有的资料.源码可以直接下载. 各位小伙伴大家好,也许这是你们第一次见到我,我和你一样,曾也是一个对于未来充满迷 ...

  3. java excel 注解_Java中注解学习系列教程-5 excel导出优化初级阶段

    在上一篇文章中,我们实现了使用自定义注解导出Excel的小案例.但是有问题的.我们发现,如果对象属性中包含了date类型或者使用了枚举类.这个时候就会出问题.我们来看看问题所在: 是不是已经看到了结果 ...

  4. 转g代码教程_图深度学习入门教程(九)——图滤波神经网络模型

    本教程是一个系列免费教程,争取每月更新2到4篇.(由于精力有限,近期停止了一段时间,在此向大家道个歉). 主要是基于图深度学习的入门内容.讲述最基本的基础知识,其中包括深度学习.数学.图神经网络等相关 ...

  5. c++教程(1)学习指南

    文章目录 background content 1. 基本认知 2. 语言选择问题 C++,java, python和go选择哪一个? 3. c++学习路线 5. 求职认知 reference bac ...

  6. java sql编辑器_Java工程师完整学习路线

    大部份同学都不太了解 Java 后端或者说今后应聘Java/J2EE开发工程师究竟需要学什么,究竟要从哪里学起,哪些是主流的 Java相关技术等等,导致想学,但又很迷茫,不知从何下手. 以过来人的经历 ...

  7. mysql between and的用法的意思_从入门到入土:MySQL完整学习指南,包教包会!

    精彩推荐 一百期Java面试题汇总SpringBoot内容聚合IntelliJ IDEA内容聚合Mybatis内容聚合 一SQL 介绍 SQL(Structured Query Language),语 ...

  8. 从入门到入土:MySQL完整学习指南,包教包会!

    精彩推荐 一百期Java面试题汇总 SpringBoot内容聚合 IntelliJ IDEA内容聚合 Mybatis内容聚合 一SQL 介绍 SQL(Structured Query Language ...

  9. 针对Java开发者的持续交付完整实施指南 | 内含福利

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作为一名开发者,您在开发完自己的应用之后,是否有去了解过 ...

最新文章

  1. python 空数组_从零开始学python之numpy
  2. oa 中会议推送 实现_诗尼曼:大OA+费控赋能千店一体,打造家居数字化标杆
  3. python输入完怎么运行-教你如何编写、保存与运行Python程序的方法
  4. 浅探C指针(一)--初识指针
  5. pyecharts学习(part5)--散点图,地图,词云图
  6. 项目管理(6):备战pmp
  7. GitHub CEO 回应源代码泄露:没有黑客!没有被入侵!
  8. 使用ceph-deploy 部署集群
  9. 三菱plc pwm指令_三菱PLC常用指令汇总,含用法与注释
  10. 开发APP软件需要哪些编程语言和开发环境
  11. 电子元器件选型——MOSFET
  12. 测试在团队中有啥用?
  13. 走出996困境:产权、通证与生产力 |链捕手
  14. Android 面试系列(一)Android 基础
  15. 改进YOLOv7系列:首发结合最新Transformer视觉模型MOAT结构:交替移动卷积和注意力带来强大的Transformer视觉模型,超强的提升
  16. MySQL引擎的理解
  17. MySQL 服务器是什么_什么是 MySQL?
  18. 循环控制语句break,continue
  19. WOW战场报新场宏实现(以及该插件实现研究)
  20. python求最大公约数

热门文章

  1. JMS createSession(false, Session.AUTO_ACKNOWLEDGE); 两个参数不同组合下的区别
  2. 彻底搞懂python函数2
  3. CDN内容分发网络(上)
  4. python微信公众号翻译功能怎么用_使用python一步一步搭建微信公众平台(二)----搭建一个中英互译的翻译工具...
  5. c语言省二级编程证书,c语言二级考试
  6. 【3y原创】什么是保险
  7. 自制紧张刺激的滑雪游戏,来一把?
  8. ffmpeg给视频画边框
  9. Android UI详解之布局管理器(一)
  10. 为Linux发行版安装中文字体