# springboot-javafx-app-demo
**Repository Path**: hfting/springboot-javafx-app-demo
## Basic Information
- **Project Name**: springboot-javafx-app-demo
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2020-10-26
- **Last Updated**: 2021-07-02
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# springboot-javafx-app-demo
## Spring Boot - JavaFX 2.0应用
> 很多人对Java开发native程序第一反应还停留在暗灰色单一风格的Java GUI界面,开发方式还停留在AWT或者Swing。本文主要基于SpringBoot和JavaFX开发一个Demo给你展示Java Native应用可以做到什么样的程度。当然JavaFX 2.0没有流行起来也是有原因的,而且目前native的选择很多,前端是个框架都会搞个native... @pdai
- [Spring Boot - JavaFX 2.0应用](#spring-boot---javafx-20%e5%ba%94%e7%94%a8)
- [技术背景 - Java 8的新特性之JavaFX2.0](#%e6%8a%80%e6%9c%af%e8%83%8c%e6%99%af---java-8%e7%9a%84%e6%96%b0%e7%89%b9%e6%80%a7%e4%b9%8bjavafx20)
- [全新现代主题:Modena](#%e5%85%a8%e6%96%b0%e7%8e%b0%e4%bb%a3%e4%b8%bb%e9%a2%98modena)
- [用于 CSS 结构的公共 API](#%e7%94%a8%e4%ba%8e-css-%e7%bb%93%e6%9e%84%e7%9a%84%e5%85%ac%e5%85%b1-api)
- [WebView 增强功能](#webview-%e5%a2%9e%e5%bc%ba%e5%8a%9f%e8%83%bd)
- [JavaFX Scene Builder 2.0](#javafx-scene-builder-20)
- [JavaFX 3D](#javafx-3d)
- [富文本](#%e5%af%8c%e6%96%87%e6%9c%ac)
- [TreeTableView](#treetableview)
- [日期控件DatePicker](#%e6%97%a5%e6%9c%9f%e6%8e%a7%e4%bb%b6datepicker)
- [Spring Boot+JavaFX2 Demo介绍](#spring-bootjavafx2-demo%e4%bb%8b%e7%bb%8d)
- [程序加载 - Loader](#%e7%a8%8b%e5%ba%8f%e5%8a%a0%e8%bd%bd---loader)
- [和WEB一样风格的GUI](#%e5%92%8cweb%e4%b8%80%e6%a0%b7%e9%a3%8e%e6%a0%bc%e7%9a%84gui)
- [对话框 - Popup](#%e5%af%b9%e8%af%9d%e6%a1%86---popup)
- [Web应用嵌入 - Webview](#web%e5%ba%94%e7%94%a8%e5%b5%8c%e5%85%a5---webview)
- [多种主题切换 - Theme](#%e5%a4%9a%e7%a7%8d%e4%b8%bb%e9%a2%98%e5%88%87%e6%8d%a2---theme)
- [消息及配置悬浮框 - Message/Configuration...](#%e6%b6%88%e6%81%af%e5%8f%8a%e9%85%8d%e7%bd%ae%e6%82%ac%e6%b5%ae%e6%a1%86---messageconfiguration)
- [全屏最大化最小化 - FullScreen/Max/Min/Close](#%e5%85%a8%e5%b1%8f%e6%9c%80%e5%a4%a7%e5%8c%96%e6%9c%80%e5%b0%8f%e5%8c%96---fullscreenmaxminclose)
- [示例代码](#%e7%a4%ba%e4%be%8b%e4%bb%a3%e7%a0%81)
> 最全的Java后端知识体系 [https://www.pdai.tech](https://www.pdai.tech), 每天更新中...。
### 技术背景 - Java 8的新特性之JavaFX2.0
#### 全新现代主题:Modena
新的Modena主题来替换原来的Caspian主题。不过在Application的start()方法中,可以通过setUserAgentStylesheet(STYLESHEET_CASPIAN)来继续使用Caspian主题。
参考http://fxexperience.com/2013/03/modena-theme-update/
#### 用于 CSS 结构的公共 API
+ CSS 样式设置是 JavaFX 的一项主要特性
+ CSS 已专门在私有 API 中实现(com.sun.javafx.css 软件包)
+ 多种工具(例如 Scene Builder)需要 CSS 公共 API
+ 开发人员将能够定义自定义 CSS 样式
#### WebView 增强功能
+ Nashorn JavaScript 引擎 https://blogs.oracle.com/nashorn/entry/open_for_business
+ WebSocket http://javafx-jira.kenai.com/browse/RT-14947
+ Web Workers http://javafx-jira.kenai.com/browse/RT-9782
#### JavaFX Scene Builder 2.0
可视化工具,加速JavaFX图形界面的开发:
JavaFX Scene Builder如同NetBeans一般,通过拖拽的方式配置界面,待完成界面之後,保存为FXML格式文件,此文件以XML描述物件配置,再交由JavaFX程式处理,因此可減少直接以JavaFX编写界面的困難度。
JavaFX Scene Builder 2.0新增JavaFX Theme预览功能,菜单「Preview」→「JavaFX Theme」选择不同的主題,包括:
+ Modena (FX8).
+ Modena Touch (FX8).
+ Modena High Contrast – Black on White (FX8).
+ Modena High Contrast – White on Black (FX8).
+ Modena High Contrast – Yellow on Black (FX8).
+ Caspian (FX2).
+ Caspian Embedded (FX2).
+ Caspian Embedded QVGA (FX2).
#### JavaFX 3D
在JavaFX8中提供了3D图像处理API,包括Shape3D (Box, Cylinder, MeshView, Sphere子类),SubScene, Material, PickResult, LightBase (AmbientLight 和PointLight子类),SceneAntialiasing等。Camera类也得到了更新。从JavaDoc中可以找到更多信息。
#### 富文本
强化了富文本的支持
#### TreeTableView
TreeTable支持
#### 日期控件DatePicker
增加日期控件
### Spring Boot+JavaFX2 Demo介绍
#### 程序加载 - Loader

#### 和WEB一样风格的GUI

#### 对话框 - Popup

#### Web应用嵌入 - Webview

#### 多种主题切换 - Theme

#### 消息及配置悬浮框 - Message/Configuration...

#### 全屏最大化最小化 - FullScreen/Max/Min/Close
> 包括全屏是基于JavaFX的一个组件,不是原生。

### 如何部署
> 收到几个开发问如何进行运行和部署,统一回复下:
+ 安装jar到本地的maven库

具体执行maven安装的脚本如下(这里D:\git\github\springboot-javafx-app-demo是我本地的项目目录,需要改成你自己的):
```bash
mvn install:install-file -DgroupId=gn -DartifactId=GNCalendar -Dversion=v1.0 -Dpackaging=jar -Dfile=D:\git\github\springboot-javafx-app-demo\lib\GNCalendar-1.0-alpha.jar
mvn install:install-file -DgroupId=gn -DartifactId=GNButton -Dversion=v1.1.0 -Dpackaging=jar -Dfile=D:\git\github\springboot-javafx-app-demo\lib\GNButton-1.1.0.jar
mvn install:install-file -DgroupId=gn -DartifactId=GNCarousel -Dversion=v2.1.5 -Dpackaging=jar -Dfile=D:\git\github\springboot-javafx-app-demo\lib\GNCarousel-2.1.5.jar
mvn install:install-file -DgroupId=gn -DartifactId=GNDecorator -Dversion=v2.1.2-alpha -Dpackaging=jar -Dfile=D:\git\github\springboot-javafx-app-demo\lib\GNDecorator-2.1.2-alpha.jar
mvn install:install-file -DgroupId=gn -DartifactId=GNAvatarView -Dversion=v1.0-rc -Dpackaging=jar -Dfile=D:\git\github\springboot-javafx-app-demo\lib\GNAvatarView-1.0-rc.jar
```
在这里执行:

+ 编译的maven插件

+ pom.xml如下
```xml
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.4.RELEASE
com.example
spring-fx-app
0.0.1-SNAPSHOT
spring-fx-app
Demo project for Spring Boot
1.8
org.springframework.boot
spring-boot-starter
gn
GNAvatarView
v1.0-rc
gn
GNButton
v1.1.0
gn
GNCalendar
v1.0
gn
GNCarousel
v2.1.5
gn
GNDecorator
v2.1.2-alpha
io.github.typhon0
AnimateFX
1.2.1
org.controlsfx
controlsfx
8.40.14
de.jensd
fontawesomefx
8.9
com.jfoenix
jfoenix
8.0.7
eu.hansolo
tilesfx
1.6.5
eu.hansolo
colors
1.4
org.springframework.boot
spring-boot-starter-test
test
com.zenjava
javafx-maven-plugin
8.8.3
pdai
com.pdai.javafx.app.SpringFxAppApplication
true
```
+ 以jar运行为例:
```bash
D:\git\github\springboot-javafx-app-demo>java -jar D:\git\github\springboot-javafx-app-demo\target\jfx\native\spring-fx-app-0.0.1-SNAPSHOT\app\spring-fx-app-0.0.1-SNAPSHOT-jfx.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.4.RELEASE)
2020-07-01 06:27:46.091 INFO 144952 --- [onPool-worker-1] o.s.boot.SpringApplication : Starting application on pdai with PID 144952 (started by pdai in D:\git\github\springboot-javafx-app-demo)
2020-07-01 06:27:46.099 INFO 144952 --- [onPool-worker-1] o.s.boot.SpringApplication : No active profile set, falling back to default profiles: default
2020-07-01 06:27:47.099 INFO 144952 --- [onPool-worker-1] o.s.boot.SpringApplication : Started application in 1.784 seconds (JVM running for 2.838)
2020-07-01 06:27:47.163 WARN 144952 --- [JavaFX-Launcher] javafx : Loading FXML document with JavaFX API of version 8.0.171 by JavaF
X runtime of version 8.0.65
2020-07-01 06:27:51.932 WARN 144952 --- [JavaFX-Launcher] javafx : Loading FXML document with JavaFX API of version 8.0.171 by JavaF
X runtime of version 8.0.65
2020-07-01 06:27:53.084 WARN 144952 --- [JavaFX-Launcher] javafx : Loading FXML document with JavaFX API of version 8.0.171 by JavaF
X runtime of version 8.0.65
2020-07-01 06:27:54.166 WARN 144952 --- [JavaFX-Launcher] javafx : Loading FXML document with JavaFX API of version 8.0.171 by JavaF
X runtime of version 8.0.65
2020-07-01 06:27:54.207 WARN 144952 --- [JavaFX-Launcher] javafx : Loading FXML document with JavaFX API of version 8.0.171 by JavaF
X runtime of version 8.0.65
2020-07-01 06:27:54.263 WARN 144952 --- [JavaFX-Launcher] javafx : Loading FXML document with JavaFX API of version 8.0.171 by JavaF
X runtime of version 8.0.65
2020-07-01 06:27:54.322 WARN 144952 --- [JavaFX-Launcher] javafx : Loading FXML document with JavaFX API of version 8.0.171 by JavaF
X runtime of version 8.0.65
2020-07-01 06:27:56.569 WARN 144952 --- [lication Thread] javafx : Loading FXML document with JavaFX API of version 8.0.171 by JavaF
X runtime of version 8.0.65
2020-07-01 06:27:56.590 WARN 144952 --- [lication Thread] javafx : Loading FXML document with JavaFX API of version 8.0.171 by JavaF
X runtime of version 8.0.65
2020-07-01 06:27:56.694 WARN 144952 --- [lication Thread] javafx : Loading FXML document with JavaFX API of version 8.0.171 by JavaF
X runtime of version 8.0.65
2020-07-01 06:27:56.707 WARN 144952 --- [lication Thread] javafx : Loading FXML document with JavaFX API of version 8.0.171 by JavaF
X runtime of version 8.0.65
```
### 示例代码
@See https://github.com/realpdai/springboot-javafx-app-demo