摘要:最近在用開發(fā)窗體程序,并且以后打算把所有的窗體軟件切換到上面,并且還想用的各種好處,集成了就可以愉快的用各種服務(wù)了。最重要的是打包工具。由于我是,一般用和,執(zhí)行命令會看到打包成了和兩種類型的安裝包。由于沒有計算機,所以還不知道打包成的狀態(tài)。
最近在用 JavaFx 開發(fā)窗體程序,并且以后打算把所有的窗體軟件切換到 JavaFx 上面,并且還想用 springboot 的__各種好處,集成了 springboot 就可以愉快的用各種服務(wù)了。所以就有了這個博客。。。1. 介紹
我本來想自己寫一個 javafx-spring-boot-starter 的,其原理也是很簡單地,利用 springboot的 aware 就可以了。但是發(fā)現(xiàn)德國這哥們已經(jīng)寫了一個,就變懶了。哎,沒辦法,我真的是太懶了。
本次的代碼Github 地址:https://github.com/spartajet/...
javafx的springboot支持的庫,官方是沒有的,開源有一大堆。我采用的是springboot-javafx-support 地址是:springboot-javafx-support .這個庫文檔比較全,比較詳細,文檔地址:Spring Boot and JavaFx8 .
用springboot必須用maven,否則那簡直是災(zāi)難。最重要的是打包工具。我用的是JavaFX Maven Plugin 地址:JavaFX Maven Plugin
2. Maven 配置maven 主要配置依賴庫和插件,具體如下:
org.springframework.boot spring-boot-starter-actuator ${spring.boot.version} org.springframework.boot spring-boot-starter ${spring.boot.version} org.springframework.boot spring-boot-starter-log4j2 ${spring.boot.version} org.springframework.boot spring-boot-starter-test ${spring.boot.version} test de.roskenet springboot-javafx-support ${springboot-javafx-support.version} org.springframework.boot spring-boot-maven-plugin com.zenjava javafx-maven-plugin com.spartajet.fxboot.demo.MainController Spartajet
其中,比較重要的是:
可以用 SceneBuilder 工具創(chuàng)建 FXML 文件,我還是建議自己寫 FXML,剛開始可能不習(xí)慣,慢慢習(xí)慣就好了。但是,我墻裂建議布局和樣式分開,fxml 只管布局,css 只管樣式。
3.2 MainStageController
每一個 fxml 布局文件對應(yīng)一個 controller,要在 fx:controller 里面設(shè)置。
/** * @description * @create 2017-05-20 下午1:55 * @email spartajet.guo@gmail.com */ @FXMLController public class MainStageController implements Initializable { /** * Called to initialize a controller after its root element has been * completely processed. * * @param location The location used to resolve relative paths for the root object, or * null if the location is not known. * @param resources The resources used to localize the root object, or null if */ public void initialize(URL location, ResourceBundle resources) { } }
實現(xiàn)Initializable接口,加上@FXMLController注解,其實很簡單的。看看@FXMLController的源碼:
@Component @Retention(RetentionPolicy.RUNTIME) public @interface FXMLController { }3.3 MainStageView
這個是比較特殊的,在普通的 javafx 里面沒有這個東西,但是按照 MVC 的角度來講,業(yè)務(wù)和試圖分離,還是很有必要的。
@FXMLView(value = "/view/MainStage.fxml") public class MainStageView extends AbstractFxmlView { }
添加的是注解@FXMLView,源碼如下:
@Component @Retention(RetentionPolicy.RUNTIME) public @interface FXMLView { String value() default ""; String[] css() default {}; String bundle() default ""; }
從這里也能看到,可以在這里注入 css 樣式文件以及 bundle 文件。還是比較方便的,我是在 fxml 里面注入的 css 文件,都是可以的。
其中還繼承了 AbstractFxmlView 的抽象類,方法比較少,最重要的是getView方法,返回的是Node對象。然后就可以隨意的用這個視圖了。
@SpringBootApplication public class MainController extends AbstractJavaFxApplicationSupport { /** * The entry point of application. * * @param args the input arguments */ public static void main(String[] args) { launchApp(MainController.class, MainStageView.class, args); } /** * Start. * * @param stage the stage * * @exception Exception the exception */ @Override public void start(Stage stage) throws Exception { super.start(stage); } }
繼承自AbstractJavaFxApplicationSupport 可以看到源碼,典型的Aware。然后就可以運行了。
可以看到
這個是啟動動畫。可以自定義啟動動畫,個人認為,啟動動畫還是很有必要的,因為 springboot 啟動費時還是比較多的,來個啟動動畫,逼格滿滿的。
3.4 啟動動畫/** * @description * @create 2017-05-20 下午2:54 * @email spartajet.guo@gmail.com */ public class CustomSplash extends SplashScreen { /** * Use your own splash image instead of the default one * * @return "/splash/javafx.png" */ @Override public String getImagePath() { return super.getImagePath(); } /** * Customize if the splash screen should be visible at all * * @return true by default */ @Override public boolean visible() { return super.visible(); } }
最常用的就是這兩個方法了,一個是更換照片,另一個是是否顯示啟動動畫。
4.0 打包JavaFX-Maven-Plugin可以打包 jar、native、webbundle、key-store這些。
由于我是 mac,一般用 jar和 native,執(zhí)行命令mvn jfx:native 會看到打包成了pkg 和 dmg 兩種類型的安裝包。并且都是180M 左右。由于沒有 windows 計算機,所以還不知道打包成 exe 的狀態(tài)。這么大的包,主要是因為 java 的 jdk 問題,模塊化以后就好了。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/71031.html
匿名類 匿名類可以使你代碼更簡潔,它們使你能夠同時聲明和實例化一個類,它們就像局部類,除了它們沒有名稱,如果你只需要使用局部類一次,請使用它們。 聲明匿名類 雖然局部類是類聲明,但匿名類是表達式,這意味著你在另一個表達式中定義該類,以下示例HelloWorldAnonymousClasses在局部變量frenchGreeting和spanishGreeting的初始化語句中使用匿名類,但使用局部類...
摘要:故可采用自定義控件的方式簡化外部的代碼調(diào)用。自定義控件的設(shè)計版本之后,提供寫法,此時要求必須繼承自節(jié)點對象,使用加載時,必須調(diào)用方法。 「博客搬家」 原地址: 簡書 原發(fā)表時間: 2017-05-21 有一個項目,需要模擬數(shù)千臺設(shè)備的工作情況,這數(shù)千個設(shè)備分為若干組,每組 100 臺。故需要設(shè)計一款 GUI 程序,包含 100 個自定義控件,模擬一組設(shè)備的工作情況,通過 List...
摘要:本文探討使用構(gòu)建集成的可執(zhí)行程序的方法,以及根節(jié)點問題。而使用后,可指導(dǎo)類作為根節(jié)點,避免了嵌套的情況。文件設(shè)計如下文件同時指明了根節(jié)點的類型,資源文件對應(yīng)的設(shè)計如下此時可實現(xiàn)開始時,純代碼方式的自定義控件設(shè)計。 「博客搬家」 原地址: 簡書 原發(fā)表時間: 2017-05-22 上一篇文章探討了使用 IntelliJ IDEA 創(chuàng)建 JavaFX 工程,進而開發(fā)了所需應(yīng)用程序。更...
摘要:創(chuàng)建窗口添加類為元素間空隙與主窗口創(chuàng)建過程相同,新建布局及控件,最后使用的方法顯示出來。設(shè)置主窗口中的按鈕事件,點擊按鈕后會顯示一個窗口。這時我們可以通過函數(shù)設(shè)置窗口關(guān)閉時觸發(fā)的事件在關(guān)閉窗口時,首先執(zhí)行這一事件處理函數(shù),再將窗口關(guān)閉。 前言 如今比較流行的桌面gui框架有WPF、WinForm、Qt、javafx等。其中WPF和WinForm目前還只能在運行Winsows上。Qt(w...
Java? 教程 Java教程是為JDK 8編寫的,本頁面中描述的示例和實踐沒有利用在后續(xù)版本中引入的改進。 Java教程是希望使用Java編程語言創(chuàng)建應(yīng)用程序的程序員的實用指南,其中包括數(shù)百個完整的工作示例和數(shù)十個課程,相關(guān)課程組被組織成教程。 覆蓋基礎(chǔ)知識的路徑 這些教程以書籍的形式提供,如Java教程,第六版,前往Amazon.com購買。 入門 介紹Java技術(shù)和安裝Java開發(fā)軟件并使用...
閱讀 3486·2021-11-12 10:36
閱讀 2857·2021-09-22 15:35
閱讀 2807·2021-09-04 16:41
閱讀 1164·2019-08-30 15:55
閱讀 3574·2019-08-29 18:43
閱讀 2070·2019-08-23 18:24
閱讀 1412·2019-08-23 18:10
閱讀 1921·2019-08-23 11:31