JavaFX工具怎样开发用户界面?

通过前面小节的学习,已经了解到使用JavaFX工具可以实现图形用户界面开发,接下来,就通过一个用户登录的案例来演示JavaFX的基本使用。

(1)创建JavaFX项目。打开Eclipse,并在Eclipse中依次选择“File”->“New”->“Others..”->“JavaFX Project”选项,创建一个名称为“javaFX”的项目,项目创建成功后,如图1所示。

图1 JavaFX项目默认结构

从图1可以看出,创建成功的JavaFX项目默认在application包下有两个文件:Main.java(程序的入口)和application.css(图形用户界面样式文件)。其中,Main.java文件中使用JavaFX工具初始化了一个图形界面,直接运行该文件,会得到一个空白窗口。

(2)编辑Main.java文件。在自动生成的Main.java文件中编写JavaFX项目主程序代码,如文件2所示。

文件1 Main.java

文件1中,Main类继承了Application抽象类并重写了start()方法,在该方法中,Stage就是JavaFX工具中用来表示整个图形工具界面窗口的类,在该类中需要加入一个Scene(场景)来进行填充,而所有的组件、元素都是构建在Scene中的。另外,在JavaFX 8中支持代码与布局和样式分离,所以在文件中通过FXMLLoader的load()方法引入了一个外联的fxml_example.fxml文件,在此fxml文件中就可以专心编写图形界面布局和组件相关功能了。

(3)创建fxml_example.fxml文件。在Main.java文件同级目录下依次选择“File”→“New”→“Others..”→“New FXML Document”选项,创建一个名称为“fxml_example”的fxml格式文件,如文件2所示。

文件2 fxml_example.fxml

文件2中,编码风格与XML文档类似。其中第1行代码用来引入fxml文件约束;第3~7行代码用于引入JavaFX工具相关类;第9~29行代码使用<GridPane>标签创建了一个网格式的面板组件,然后通过各种子标签和属性向该面板组件中进行填充。另外在<GridPane>标签中使用fx:controller=\”application.FXMLExampleController\”引入了application包下的FXMLExampleController事件控制类,并且在第23行中,使用onAction=\”#handleSubmitButtonAction\”注册了FXMLExampleController类中的监听器方法handleSubmitButtonAction()。

(4)创建并编辑FXMLExampleController.java文件。在Main.java文件同级目录下创建一个名为FXMLExampleController的事件处理类,然后在该文件中编写事件处理方法,如文件3所示。

文件3 FXMLExampleController.java

文件3中,FXMLExampleController.java类专门用于编写事件处理方法,其中使用@FXML注解用来表示actiontarget文本属性和handleSubmitButtonAction()方法可以被fxml格式文件访问,同时handleSubmitButtonAction()的方法名与文件2中第23行代码onAction=\”#handleSubmitButtonAction\”中标记的名称需要相同,actiontarget属性名与文件2中第26行代码fx:id=\”actiontarget\”的id名也要相同。

完成上述4步操作后,运行主程序Main类,结果如图2所示。

图2 JavaFX项目初步效果图

(5)为fxml_example.fxml图形布局文件引入外联的CSS样式文件。

● 先在fxml_example.fxml文件最后的</GridPane>标签之前引入名称为application.css的样式表文件,示例如下所示:

● 如果要为GridPane面板组件根元素设置样式,需要在<GridPane>标签中添加一个styleClass=\”root\”的属性,示例如下所示:

● 同时可以为某个组件所在标签添加一个id,为该id所在组件设置样式,比如为text=\”Welcome\”的<Text>标签所在组件添加一个id,示例如下所示:

(6)编辑application.css样式文件。打开application.css样式文件,为图8-37所示的JavaFX图形用户接口项目编写CSS样式,如文件4所示。

文件4 application.css

在文件4中,application.css文件专门用于封装文件样式,在上一步中为fxml_example.fxml图形布局文件引入了该外联的CSS样式文件,<GridPane>根组件的background.jpg背景图片位于该文件所在同级目录中。其中,对fxml_example.fxml文件中某个名称的标签进行样式设置时,可以使用点号+标签名(如.button)的形式进行设置;对某个id所对应的标签组件进行样式设置时,可以使用井号+id(如#welcome-text)的形式进行设置。

当编写完并引入application.css样式文件成功后,再次启动主程序入口Main类中的main()方法,结果如图3所示。

图3 JavaFX项目最终效果图

Java 快速开发几 MB 独立 EXE,写图形界面很方便

aardio 可以支持很多编程语言, Java 就是其中之一。

aardio + Java 可生成体积极小的独立 EXE 文件,可以内存加载 Java 编写的 class 文件,用 aardio + Java 生成的软件,发布时不需要携带 Java 运行时

aardio 写图形界面很方便,参考仅 755 KB 的开源软件 Gif123:

aardio 开发的程序,兼容XP,Vista,Win7,Win8,Win10,Win11…… 等所有系统。aardio 只支持 Windows 系统( macOS + Linux 桌面市场份额小于被遗忘的 Win8 ),同时也扔掉了跨平台的沉重包袱(更轻量、更好地利用专用平台优势)。将需要跨平台的代码用 Java 写,这并不影响在 Windows 上可以使用 aardio 生成 EXE 文件 。跨平台与专有平台工具并不冲突,可以相互结合。

默认只要在 aardio 中调用

就会自动搜索系统可用的 JRE,如果没有找到 JRE,会自动导入 java.jre.v8 扩展库,并自动安装 OpenJDK JRE v8 。

如果您希望发布的软件自带 Java 运行时,或者指定 JRE 的版本,只要在 aardio 中导入其他版本 JRE 的扩展库就可以,例如运行

就可以自动绑定 Oracle Java 8 运行时,软件运行会自动查找用户电脑上符合要求的 JRE,如果没有找到会全自动地安装和部署好,开发者要做的,仅仅就是写几句代码,把 EXE 简单地分发给用户就可以了。

当然,独立 EXE 也可以嵌入更小的 JRE,aardio 里提供了一个示例 JRE,只要简单的在代码中加入

就可以在软件中嵌入一个精简版的 JRE 6 运行时,这个 JRE 只有 6MB 多一点,而且可以生成独立 EXE 文件,甚至还能支持 Windows XP 这种古老的系统。Java 写的桌面软件带上运行时只有 6 MB,而且还是独立 EXE 文 件,是不是难以置信?!想一想 Electron 没写多少功能就可能超过百 MB 的体积,Java 写的桌面软件算不算得上小、轻、快呢?!

现代 Java 已经可以非常方便地生成精简版的 JRE,所以你只要参考 java.jre.v6 的实现( 放心这个库的源代码只有几行 ),就可以非常轻松地更换为其他 JRE 版本,并生成极小的 EXE文件( 而且可以是独立的 EXE文件)。

好吧,我们来看几个 aardio 自带的 aardio + Java 范例( 可以直接运行 )。

首先请看下面 aardio 调用 Java 如此简单,我们可以在 aardio 中直接导入 Java 的类,创建 Java 对象,就像在 Java 代码中一样使用它们。

Java 会在 CLASSPATH 指定的搜索目录下使用 Java 类名(替换\’.\’为\’\\\’)\” 去查找类,这类似 Windows 到 %PATH% 环境变量下搜索文件。CLASSPATH 已默认添加 \”/java/\”以及\”/java/*.jar\” 在首次创建 Java 虚拟机以前,可用下面的函数添加目录到 CLASSPATH:

以上参数指定目录下的 *.jar 也会自动添加(不递归子目录)。

也可以如下自内存或文件直接加载类,注意下面的路径前面的$操作符可将文件编译到代码中(发布后不再需要原文件)

以上文件路径前面的波浪线反斜杠(或斜杆)表示程序根目录(开发时一般指工程目录,发布后指启动EXE文件所在的目录)。

示例:

Java 类 HelloworldApp (在范例中可以找到)中如下声明 aardio 函数:

您仅需数句代码可以将 jar 导入 aardio 生成软件件。以 Java 编写的软件 FFDec 为例,原来只能自己去下载安装 JRE,现在不用这么做了,我用 aardio 写了个例子:

这个扩展库 java.ffdec 的源代码只有几句:

我们还可以直接调用 jar 的 main 函数来运行 Java 程序,以 YUICompressor 为例:

原本调用 Java 函数要写签名,但这个签名写起来是有些累的。所以 aardio 已经把这个事情完全给优化掉了,aardio 调用 Java 一般不用再去写签名。

但是 aardio 仍然允许以声明普通静态 API 函数的语法指定 Java 函数签名 —— 然后由 aardio 自动翻译为 Java 函数签名。

举个例子:

但是上面的函数签名一般可以省略,可以简化为下面的代码:

上面的示例需要的 Java 类,可以在​ aardio 自带范例里找到:

C 语言桌面端图形界面开发库

LCUI 是一个用 C 编写的图形界面开发库,你可以用 C、XML 和 CSS 创建简单的桌面应用,包括传统的 Win32 桌面应用、Windows 通用应用。

  • C 语言编写: 适用于体积较小且主要使用 C 语言实现的应用程序,以及偏向使用 C 语言编写简单应用的开发者。
  • 跨平台: 支持 Windows 和 GNU/Linux 系统,可开发简单的 Windows 桌面应用和通用应用,以及 Linux 桌面应用。
  • XML + CSS: 预置 XML 和 CSS 解析器,你可以使用 XML 和 CSS 来描述界面结构和样式。
  • 与网页类似的开发体验: 由于 LCUI 的布局、样式和渲染器等相关功能的设计和实现大都参考了 MDN 文档和一些 Web 前端流行的开发库,因此开发体验和界面效果会与网页有一些相似之处,如果你已经有用 HTML 和 CSS 编过网页的经验,那么会比较容易上手。
  • 可缩放: 支持全局缩放,支持使用基于屏幕密度的 sp 和 dp 单位表示界面元素的位置和大小。
  • 用于开发 LCUI 应用程序的命令行工具

项目地址: https://github.com/lc-ui/lcui-cli

  • LCUI 的路由管理器,用于解决 LCUI 应用内多视图的切换和状态管理问题

项目地址: https://github.com/lc-soft/lcui-router

  • 专为 LCUI 开发的组件库,包含了一些通用组件和 CSS 样式,组件设计参考自 Bootstrap、ElementUI、AntDesign

项目地址: https://github.com/lc-ui/lc-design

  • 图片管理器,LCUI 的旗舰级应用程序

项目地址: https://github.com/lc-soft/LC-Finder

  • 基于 JavaScript 语法且可编译为 C 的语言,预置 LCUI 绑定,提供类似于 React 的声明式 UI 开发体验

项目地址: https://github.com/lc-soft/trad

此项目使用MIT开源协议,更多内容大家可自行前往阅读。

开源地址:https://github.com/lc-soft/LCUI

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。