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应用中同样也会出现这种情况,在开发过程中应该尽量避免这种情况的出现. >> ...
随机推荐
- 09-Python异常
一.简介 在实际的工作过程中,我们会遇到各种问题,比如文件不存在,代码运行不符合某些特定逻辑等,程序在运行时,遇到这些问题便会发生异常.英文是Exception. a = float(input('请 ...
- Java图片验证码生成工具
直接把以下代码拷贝使用: import javax.imageio.ImageIO;import java.awt.*;import java.awt.image.BufferedImage;impo ...
- three.js 制作属于自己的动态二维码
今天郭先生说一下用canvas解析图片流,然后制作一个动态二维码的小案例,话不多说先上图,在线案例点击博客原文.这是郭先生的微信二维码哦! 1. 解析图片流 canvas = document.cre ...
- 利用CloudFlare自动DDNS
注意要 仅限 DNS 获取咱的Key https://dash.cloudflare.com/profile 先在控制面板找到咱的目前IP,然后到Cloudflare中新建一个A记录,如:ddns.y ...
- Fastjson到了说再见的时候了
生命太短暂,不要去做一些根本没有人想要的东西.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习 ...
- STL源码剖析:迭代器
准备知识 什么是迭代器? 迭代器是链接容器和算法的桥梁,所有的算法都通过迭代器操作容器中的数据 迭代器是一种智能指针,最重要的操作符重载就是operator*,operator-> 迭代器的实现 ...
- [jvm] -- 类加载器及双亲委派模板篇
类加载器 JVM 中内置了三个重要的 ClassLoader BootstrapClassLoader(启动类加载器):最顶层的加载类,由C++实现,负责加载 %JAVA_HOME%/lib目录下的j ...
- 深入探究JVM之垃圾回收器
@ 目录 前言 正文 一.垃圾收集算法 标记-复制 标记-清除 标记-整理 分代回收 二.常用的垃圾回收器 Serial/SerialOld ParNew Parallel Scavenge/Para ...
- matplotlib图表介绍
Matplotlib 是一个python 的绘图库,主要用于生成2D图表. 常用到的是matplotlib中的pyplot,导入方式import matplotlib.pyplot as plt 一. ...
- java动态代理——字段和方法字节码的基础结构及Proxy源码分析三
前文地址:https://www.cnblogs.com/tera/p/13280547.html 本系列文章主要是博主在学习spring aop的过程中了解到其使用了java动态代理,本着究根问底的 ...