JavaFX桌面应用开发-HelloWorld
JavaFX是一个强大的图形和多媒体处理工具包集合,它允许开发者来设计、创建、测试、调试和部署富客户端程序,并且和Java一样跨平台。
JavaFX比Swing好用很多,它允许开发使用FXML来设计和布局界面,跟Qt和Android的布局有点类似。
>> 更多JavaFX文章 >> JavaFX桌面应用开发系列文章
1. JavaFX UI 层级关系
JavaFX的UI分为几类:
- 窗口(stage)
- 场景(scene)
- 容器(container)
- 控件(controller)
它们之间的关系为:
stage: # 顶层
scene: # 放在窗口内
container: # 放在场景内(布局)
controller: # 放在容器中
2. 创建JavaFX应用
JavaFX应用的创建可以跟普通的Java应用创建一样,即创建一个普通的maven项目即可,不过需要JavaFX的应用主程序需要继承Application这个类。
编写最简单的应用(空白窗口):
public class App extends Application {
@Override
public void start(Stage stage) {
stage.setTitle("JavaFX Hello World");
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
效果图:

3. 添加自己的控件
JavaFX允许使用FXML来设计和布局界面,各模块也支持按MVC进行划分,即control(控制层)、 model(模型层)和view(视图层)。
下面按MVC这种模式,分别创建控制层、视图层、和模型层。
首先是控制层:AppUI。
控制层将view(视图层)的控件text通过bindBidirectional将其text属性跟model(模型层)的text属性绑定,这样就可以通过设置model的text来达到改变view的text属性的效果。
public class AppUI implements Initializable {
public Label text;
private AppModel model = new AppModel();
@Override
public void initialize(URL location, ResourceBundle resources) {
text.textProperty().bindBidirectional(model.textProperty());
model.setText("Hello JavaFX.");
}
}
接着是模型层:AppModel
模型层主要的作用是数据载体,在控制层将视图层的控件跟模型层的属性绑定,以达到改变模型就改变视图。(这一点跟Vue有点类似)。
public class AppModel {
private StringProperty text = new SimpleStringProperty();
public String getText() {
return text.get();
}
public StringProperty textProperty() {
return text;
}
public void setText(String text) {
this.text.set(text);
}
}
然后是视图层:AppUI.fxml
视频层采用JavaFX的FXML来布局界面,这里简单的使用BorderPane作为容器,里面只放了一个Label控件。
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.BorderPane?>
<BorderPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.172-ea"
xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.itqn.gui.javafx.wx.ui.AppUI">
<center>
<Label fx:id="text" BorderPane.alignment="CENTER" />
</center>
</BorderPane>
最后,根据层级关系组织JavaFX应用
控件(Label)放在容器(BorderPane)里面,容器放在场景里面,场景放在窗口里面即可。
public class App extends Application {
@Override
public void start(Stage stage) throws Exception {
Parent root = AppUI.load();
Scene scene = new Scene(root);
stage.setTitle("JavaFX Hello World");
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
这样一个最简单的完整JavaFX就开发完了。

这里需要注意的是: ,因为fxml跟java代码放在同一个包下面,所以需要在maven的pom.xml配置resources。
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.fxml</include>
</includes>
</resource>
</resources>
</build>
=========================================================
源码可关注公众号 “HiIT青年” 发送 “javafx-helloworld” 获取。

关注公众号,阅读更多文章。
JavaFX桌面应用开发-HelloWorld的更多相关文章
- JavaFX桌面应用开发系列文章
~ JavaFX桌面应用开发系列文章汇总篇 ~ JavaFX桌面应用开发-HelloWorld JavaFX布局神器-SceneBuilder JavaFX让UI更美观-CSS样式 JavaFX桌面应 ...
- JavaFX桌面应用开发-鼠标事件和键盘事件
鼠标相关事件的操作初始代码 package application; import javafx.application.Application;import javafx.event.ActionE ...
- JavaFX桌面应用开发-Button(按钮)与事件
1:Button样式的操作原始代码: package application; import javafx.application.Application;import javafx.scene.Gr ...
- JavaFX桌面应用-MVC模式开发,“真香”
使用mvc模块开发JavaFX桌面应用在JavaFX系列文章第一篇 JavaFX桌面应用开发-HelloWorld 已经提到过,这里单独整理使用mvc模式开发开发的流程. ~ JavaFX桌面应用开发 ...
- JavaFX桌面应用-视频转码工具(支持爱奇艺qsv转mp4)
最近由于需要将在爱奇艺下载的视频(qsv)转化了mp4,用JavaFX开发一个视频转码工具,算是JavaFX开发的第一个应用吧. 支持qsv转码mp4,理论上支持各种格式,仅测试了flv,qsv格式. ...
- JavaFX桌面应用-loading界面
上次使用JavaFX开发了一个视频转码工具,当用户点击"启动"按钮开始转码的时候,会禁用启动按钮,防止多次启动转码. 这种处理方式对用户来说可能并是很友好,其实可以在启动转码的时弹 ...
- JavaFX桌面应用-SpringBoot + JavaFX
SpringBoot对于Java程序员来说可以是一个福音,它让程序员在开发的时候,大大简化了各种spring的xml配置. 那么在JavaFX项目使用SpringBoot会是怎么样的体验呢? 这次使用 ...
- JavaFX桌面应用-构建程序框架
看到JavaFX应用很多人都会说JavaFX应用太丑了,确实JavaFX比起Qt.MFC.Delphi这些界面确实丑了一点,但也不是没有可以美化的空间. 跟网页一样,单纯HTML不加任何CSS的时候也 ...
- JavaFX桌面应用-为什么应用老是“未响应”
日常使用软件的过程中,偶尔会遇到软件突然卡住,再点击几次就变成"未响应"的情况. 在JavaFX应用中同样也会出现这种情况,在开发过程中应该尽量避免这种情况的出现. >> ...
随机推荐
- Security and Risk Management(5)
Ethics: ISC Code of Ethics You agree to this before the exam, and the code of ethics is very testabl ...
- P4017 最大食物链计数 (拓扑排序)
看到拓扑排序感觉非常遥远的复杂,不喜欢图.看了拓扑排序的原理,很像广搜. 以本题样例为例: 了解一下 出度 和 入度 5的出度为3 入度为 0 ,3的出度为2 入度为2…… for循环 找到秃头 5 ...
- 题解 洛谷 P4336 【[SHOI2016]黑暗前的幻想乡】
生成树计数的问题用矩阵树定理解决. 考虑如何解决去重的问题,也就是如何保证每个公司都修建一条道路. 用容斥来解决,为方便起见,我处理时先将\(n\)减了1. 设\(f(n)\)为用\(n\)个公司,且 ...
- centos7.5安装gdal编译环境
安装准备的环境: 名称 类型与版本 软件连接 服务器 linux-centos7.5 jdk 1.8.0_25 ant 1.9.14 http://mirror.bit.edu.cn/apac ...
- fiddler替换修改后的js文件绕过无限debugger
转自:https://www.jianshu.com/p/38c4afae636c 1.在js文件右击, 然后点击save as ..., 把js文件保存到本地.(网站:https://taodaxi ...
- java基础(十)--空指针异常
空指针异常即:java.lang.NUllPointException异常,主要用于在对象为null的情况下,调用对象的方法或对象的属性时会抛出. 举例说明: public class TestBas ...
- 解决智慧城市发展困扰:Web 3D 智慧环卫 GIS 系统
前言 智慧环卫,依托物联网技术与移动互联网技术,对环卫管理所涉及到的人.车.物.事进行全过程实时管理,合理设计规划环卫管理模式,提升环卫作业质量,降低环卫运营成本,用数字评估和推动垃圾分类管理实效.智 ...
- expect正则捕获返回结果
expect正则捕获返回结果 expect: expect -re "([0-9]*)([a-zA-Z]*)"send_user "num is $expect_out( ...
- 使用 you-get 下载免费电影或电视剧
安装 you-get 和 ffmpeg ffmpeg 主要是下载之后,合并音频和视频 pip install you-get -i http://pypi.douban.com/simple/ --t ...
- PHP array_reverse() 函数
实例 返回翻转顺序的数组: <?php $a=array("a"=>"Volvo","b"=>"BMW" ...