Spingboot+maven构建一个javafx的项目,开发并打包
本文为转载
1介绍:
Javafx的springboot的支持库,官方是没有的,开源的有一大堆,本文采用的是springboot-javafx-support
地址是:springboot-javafx-support.这个库文档比较全,比较详细,文档地址:SpringBoot and JavaFx8
用springboot
必须用maven
,否则那简直是灾难。最重要的是打包工具。我用的是JavaFX Maven Plugin
地址:JavaFX Maven Plugin
2、maven配置
具体maven配置可以参见项目代码。这里主要写一些注意事项。Maven配置最重要的是:<mainClass>com.spartajet.fxboot.demo.MainController</mainClass>
这个是打包的时候的 main 类。<vendor>Spartajet</vendor>
是组织名称。
3、javafx集成springboot
3.1创建FXML布局文件
可以使用SceneBuilder工具创建FXML文件,我还是建议自己写FXML,刚开始不太习惯,慢慢适应就好了。但是强烈建议布局和样式分开,FXML只管布局,CSS只管样式。
<BorderPaneid="mainBorderPane"xmlns="http://javafx.com/javafx/8.0.111"xmlns:fx="http://javafx.com/fxml/1"fx:controller="com.spartajet.fxboot.demo.controller.MainStageController"stylesheets="/css/MainStage.css"></BroderPane>
3.2MainStageController
每一个FXML布局文件都对应一个contriller,要在fx:contorller进行设置。
/**
* @description
* @create2017-05-20 下午1:55
* @email spartajet.guo@gmail.com
*/
@FXMLController
publicclassMainStageControllerimplementsInitializable {
/**
* Called to initialize a controller afterits root element has been
* completely processed.
*
* @paramlocation The location used to resolverelative paths for the root object, or
* <tt>null</tt> ifthe location is not known.
* @paramresources The resources used to localize the root object, or<tt>null</tt> if
*/
public voidinitialize(URL location, ResourceBundle resources) {
}
实现Initializable接口,加上了@FXMLContorller注解
3.3MainStageView
这个是比较特殊的,在普通的javafx里面没有这个东西,但是按照MVC的角度来说,业务和视图分离,是很有必要的。
@FXMLView(value= "/view/MainStage.fxml")
public classMainStageViewextendsAbstractFxmlView { }
这里注意,添加的是@FXMLView注解,这个可以注入CSS样式文件以及bundle文件。本文的CSS文件是在FXML文件中引入的,都可以的。
其中还继承了AbstractFxmlView抽象类,方法比较少,比较重要的是getView方法,返回的是Node对象,然后就可以随意使用这个视图了。
3.3MainController
具体代码可看项目。
继承自AbstractJavaFxApplicationSupport可以看源码,典型的Aware。然后就可以运行了。
可以看到
这是启动动画,可以自定义启动动画,个人认为,启动动画还是很有必要的,因为springboot启动费时还是比较多的,来个启动动画,逼格满满的。
3.4启动动画
/**
* @description
* @create2017-05-20 下午2:54
* @emailspartajet.guo@gmail.com
*/
publicclassCustomSplashextendsSplashScreen {
/**
* Use your own splash image instead of thedefault one
*
* @return"/splash/javafx.png"
*/
@Override
public StringgetImagePath() {
returnsuper.getImagePath();
}
/**
* Customize if the splash screen should bevisible at all
*
* @return trueby default
*/
@Override
publicbooleanvisible() {
returnsuper.visible();
最常用的就是这两个方法了,一个是更换照片,另一个是是否显示启动动画。
4.0打包
JavaFX-Maven-Plugin可以打包jar、native、webbundle、key-store这些。
如果是mac,一般用jar和native,执行命令mvn jfx:native会看到打包成了pkg和dmg两种类型的安装包。并且都是在180M左右。这么大的包,主要是因为java的jdk的问题,模块化之后就好了。