什么是JavaFX
簡單的定義:JavaFX是一套可用Java編寫開發(fā)的圖形界面工具類庫扼菠。
那些怎么連接數(shù)據(jù)庫摄杂,怎么網(wǎng)絡通信,等等問題循榆,都屬于Java問題析恢,跟JavaFX沒有任何關(guān)系。
JavaFX適合寫跨平臺的桌面端圖形界面程序秧饮,有人想把JavaFX用到移動端映挂,我并不建議這樣做,
移動端的Android和IOS浦楣,各自都有優(yōu)秀的框架可供開發(fā),所以除非你想玩玩咪辱,否則沒必要將JavaFX用到移動端振劳。
JavaFX的類庫里都有什么
基本上其它圖形類庫里有什么,JavaFX基本上也都提供了油狂,大致有以下幾類
基本控件:
按鈕历恐,標簽寸癌,輸入框,圖片視圖弱贼,下拉列表蒸苇,普通列表,表格吮旅,等等溪烤。
布局方式:
水平布局,垂直布局庇勃,相對布局檬嘀,方向布局,流式布局责嚷,堆棧布局鸳兽,等等。
線程任務:
當有耗時和易阻塞的任務時罕拂,JavaFX還提供了3種多任務處理揍异,其中包括,普通一次性任務爆班,可重復使用守護線程任務衷掷,可定制啟動時間和執(zhí)行周期的可重復使用守護線程任務。
動畫控制:
位移動畫蛋济,旋轉(zhuǎn)動畫棍鳖,并行動畫,串行動畫碗旅,以及動畫開始和結(jié)束的控制渡处,等等。
效果應用:
JavaFX還提供對控件的效果應用祟辟,比如倒影医瘫,陰影,模糊旧困,光照醇份,置換,等等吼具。
音頻視頻:
支持對幾種常見格式的音頻和視頻播放僚纷,以及簡單控制。
2D圖形:
提供大量常見圖形拗盒,可以直接添加到界面上怖竭,比如,線段陡蝇,曲線痊臭,矩形哮肚,圓形,橢圓广匙,路徑潭枣,貝塞爾曲線夫椭,SVG路徑咽块,等等锭碳。
3D圖形:
提供基礎(chǔ)幾個常見3D圖形,比如立方體蹋凝,球體鲁纠,圓柱體,還可以調(diào)整控制燈光和攝像機鳍寂,等等改含。
JavaFX類庫問題
我把話就撂在這:JavaFX成也Java,敗也Java
在JDK8之前迄汛,JavaFX是用一套腳本語言進行開發(fā)捍壤,之前Sun公司的那些爛事就不提了,總之Sun公司被Oracle收購后鞍爱,或許覺得JavaFX再這么搞下去遲早要完鹃觉,后來就將JavaFX改成了用Java開發(fā)。
自從JDK8開始睹逃,JavaFX類庫就內(nèi)置到了JDK當中盗扇,并且是想要取得原來的Swing和AWT類庫,理想很美好沉填,但是現(xiàn)實很殘酷疗隶,JavaFX在JDK當中存在了8,9,10這三個版本后,被現(xiàn)實瘋狂抽臉翼闹,始終不溫不火斑鼻,于是從JDk11開始,JavaFX類庫就行JDK當中移除了猎荠,作為一個開源項目進行維護開發(fā)坚弱。
所以如果使用的是JDK8,9,10這三個版本,可以直接使用JavaFX類庫关摇,如果使用的是JDK11及其以上版本荒叶,需要單獨導入JavaFX的類庫。
開發(fā)方式
JavaFX可以用Java按照非常傳統(tǒng)的代碼方式進行開發(fā)输虱,
也可以使用現(xiàn)在流行的些楣,F(xiàn)XML文件,CSS文件,配合可視化工具戈毒,利用MVC模式進行開發(fā),
還可以使用面向未來的綁定的方式横堡,響應的方式進行開發(fā)埋市。
其實JavaFX是一套非常優(yōu)秀的框架,誰問我命贴,我都這樣說道宅,奈何它是Java。
不管哪種方式開發(fā)胸蛛,用的都是Java污茵,但是Java有個缺點,就是太繁瑣冗長葬项,沒那么干凈利索泞当。
所以導致大量的時間都用在了構(gòu)建界面上,不管哪種方式民珍,都導致效率不高襟士。
其實這不只是JavaFX面臨的問題,其它傳統(tǒng)的圖形類庫同樣面臨這樣的問題嚷量。
為什么要用Kotlin擴展
因為傳統(tǒng)的開發(fā)方式陋桂,都是定義一個控件,傳給一個引用變量蝶溶,然后拿到這個引用變量可以設置這個控件嗜历。
但是Google的Flutter和蘋果的SwiftUI,告訴我們未來的開發(fā)方式抖所,不再是傳統(tǒng)的樣子梨州,而是以數(shù)據(jù)為核心,以綁定和響應的方式進行開發(fā)部蛇。
而JavaFX剛好是支持數(shù)據(jù)綁定摊唇,所以JavaFX能不能改造成類似SwiftUI那種方式,
答案是可以的涯鲁,所以第一個選擇就是用Kotlin巷查,因為Kotlin和Java可以互操作,而Kotlin簡單靈活干凈利索抹腿,方便快速構(gòu)建界面岛请。
其實這項目就是我的玩具而已,只是對未來圖形界面開發(fā)方式的一種探索警绩,上面寫那么多崇败,一個蛋用都沒有,就是為了水一篇文章。
接下來是我改造的過程后室,如果你對某些控件的寫法上有些意見缩膝,可以留言,大家一起改岸霹,一起玩疾层。
總之以后能寫界面的速度更快一點就算成功了。
當然如果對某些控件需要一些額外的功能贡避,也可以提出來痛黎,可以實現(xiàn)后打包到類庫里面,以后方便調(diào)用刮吧。
目前已經(jīng)寫了一部分內(nèi)容湖饱,暫時無法提供jar包,后面會提供jar給大家體驗杀捻。
聲明:我并沒有打算完全改了JavaFX井厌,我只是打算換一種寫法,一種更快速的寫法而已