github:https://github.com/Stars-One/common-controls
為TornadoFx的封裝的常用控件與工具,基於Jfoenix,借鑒Kfoenix
前言
這個開源庫原本我也不想開源出來的,畢竟花費了自己很久的時間,但是想到TornadoFx國內實在沒有多少人用,便是想開源出來了,國內TornadoFx資料較少,有些組件並沒有,只能靠自己來造。
在這個前端為主的時代,可能只有我這種人還在獨自堅持研究這種小眾的技術吧(至少國內是這樣的情況)
希望你在使用之前可以根據自己的實際情況給予打賞,算是對我的鼓勵,你的打賞是我后期維護並積極更新的動力!謝謝
TornadoFX交流群:1071184701
TornadoFx中文文檔 目前還在翻譯中
本庫包含了之前的IconText和DialogBuilder
-
IconText: 5000+個Material Design字體圖標庫
-
DialogBuilder 基於Jfoenix的對話框生成器
引入依賴
Maven引入
1. 添加倉庫
由於jar包是上傳在jitpack倉庫中,所以得在項目的pom.xml添加倉庫
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
2.添加依賴
<dependency>
<groupId>com.github.Stars-One</groupId>
<artifactId>common-controls</artifactId>
<version>1.3</version>
</dependency>
Gradle引入
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.Stars-One:common-controls:1.3'
}
介紹
控件主要分為以下幾個大類:
- 對話框
- 檢測更新
- 常用方法
- 常用控件
- 下載框架(可能考慮獨立出來?)
1.常用對話框
對話框提供了整合了之前的DiglogBuilder,並新增加了加載對話框和自定義對話框內容,參考了Kf項目,我把有些對話框整合成了Kotlin中的DSL方式調用,有些對話框就沒有
普通對話框
jfxbutton("測試消息") {
action {
jfxdialog(currentStage, "標題", "內容")
}
}
確認對話框
jfxbutton("測試確認對話框") {
action {
DialogBuilder(currentStage)
.setTitle(title)
.setMessage("hello")
.setNegativeBtn("取消"){ println("點擊了取消按鈕")}
.setPositiveBtn("確定") { println("點擊了確定按鈕")}
.create()
}
}
PS:提供了改變顏色,在對應的setBtn方法添加顏色即可,顏色支持十六進制和文字,如
jfxbutton("測試確認對話框") {
action {
DialogBuilder(currentStage)
.setTitle(title)
.setMessage("hello")
.setNegativeBtn("取消","red"){ println("點擊了取消按鈕")}
.setPositiveBtn("確定","#fafafa") { println("點擊了確定按鈕")}
.create()
}
}
輸入對話框
彈出對話框,讓用戶輸入內容
jfxbutton("測試輸入對話框") {
action {
//text即為用戶輸入的內容
jfxdialog(currentStage, "帶輸入框的對話框", "輸入整數內容", { text -> println(text) })
}
}
輸出對話框
此對話框用來提示對應的網址或者是文件的位置,用戶點擊之后可以跳轉瀏覽器或者是打開資源管理器並定位到文件
jfxbutton("測試輸出對話框") {
action {
//文件
jfxdialog(currentStage, "帶鏈接的輸入框", "輸出目錄為","D:\\text.txt"
,false)
//網址
jfxdialog(currentStage, "帶鏈接的輸入框", "輸出目錄為","stars-one.site"
,true)
}
}
下載對話框
jfxbutton("下載"){
action{
DownloadDialogView(currentStage,"下載地址","D:\\test.txt")
.show()
}
}
PS:第三個參數路徑可不填,則自動截取下載地址的末尾的作為文件名,並下載到與jar的同目錄文件中
加載對話框
jfxbutton("測試加載對話框") {
action {
loadingDialog(currentStage,"標題","內容"){alert ->
runAsync {
//這里做網絡請求或者其他耗時的操作
for (i in 0..3) {
Thread.sleep(200)
println(i)
}
} ui{
//調用close或者hideWithAnimation關閉對話框
alert.hideWithAnimation()
}
}
}
}
關閉程序對話框
jfxbutton("關閉程序對話框") {
action {
stopDialog(currentStage,"標題","點擊確定結束當前程序")
}
}
檢測更新對話框
這里單獨抽出來講解使用,詳見第2部分
自定義對話框
若是你不滿足已有的對話框,你可以按照你的喜歡,自定義對話框的內容
//這里你可以自定義布局
val content = HBox(Text("自定義內容"))
val alert = DialogBuilder(currentStage)
.setCustomContext(content)
.setNegativeBtn("確定")
.create()
2.檢測更新功能
基於上面的對話框,實現了自動檢測更新的框架
我這里是使用了博客園和藍奏雲作為更新的平台,博客園用來發布新版本的信息,藍奏雲則用來上傳更新文件
使用之前,你需要在博客園發布一篇隨筆,並以下面的表格形式,這里給出對應的md格式
|版本名|版本號 |更新時間 |更新內容 |更新地址|
|-- |-- |-- |-- |-- |
|v1.1 |2 |2020-7-10 |1.更新xx\n2.更新xx | |
|v1.0 |1 |2020-7-10 |1.更新xx\n2.更新xx | |
更新內容一欄中,通過\n
來實現換行
更新地址,你可以使用藍奏雲的地址或者是其他的地址,如果使用藍奏雲的話,一定要是整個文件夾的地址
更新版本時,你需要將博客園上隨筆的內容進行更新,並在新版本的信息放在表格第一行,並保證版本號比之前的要高,否則框架無法檢測到新版本的升級(使用藍奏雲的話,則在之前的文件夾上傳文件即可,框架會自動下載第一個的文件,即為最新版本的文件)
jfxbutton("檢測更新") {
action {
//最重要的是版本號,記得是int類型的,版本名無關緊要,只是讓之后的升級提示對話框顯示可以好看點
TornadoFxUtil.checkVersion(currentStage, "https://www.cnblogs.com/stars-one/p/13284015.html", "當前版本號", "當前版本名")
}
}
3.常用方法
位於TornadoFxUtils.kt文件中
- 下載文件
downloadFile
- 下載圖片
downloadImage
- 復制文字到粘貼板
copyTextToClipboard
- 自動補全網址
completeUrl
- 檢測版本更新
checkVersion
4.常用控件
以下的控件其實本質上都是一個方法,使用了TornadoFx內置的DSL語法進行書寫,使用的時候和TornadoFx編寫布局的代碼是一樣的
控件 | 控件名稱 | 例子 |
---|---|---|
urlLink | 可選擇的超鏈接文本 | urlLink("博客地址","stars-one.site") |
imageview | 生成指定寬高的圖片,正方形的圖片可省略高度參數 | imageview("xx.jpg",50,50) |
iconItem | 生成帶圖標的右鍵菜單(ContextMenu),每個控件都有setContextMenu方法 | ![]() |
selectText | 可選擇的文本框 | selectText("內容") |
jfxbutton | 指定寬高的扁平按鈕,正方形可省略高度參數 | jfxbutton("xx.jpg",50,50) |
circlejfxbutton | 圓形圖標扁平按鈕(鼠標滑過會有陰影),傳遞一個node參數 | circlejfxbutton(imageview("xx.jpg",50)) |
filetextfield | 文件輸入+選擇 | selectText("內容") |
showToast | 顯示Toast | ![]() |
5.下載框架
對應的HttpDownloader類
構造方法需要傳入一個下載地址和保存文件路徑,之后調用startDownload
方法即可下載
HttpDownloader(downloadUrl, file).startDownload(object : HttpDownloader.OnDownloading {
override fun onProgress(progress: Double, percent: Int, speed: String) {
//回調的幾個參數,progress是進度,percent是百分比,speed是下載速度
//你可以使用在下載之前將相關得到控件綁定一個觀察者,之后將這里的相關參數設置即可
}
override fun onFinish() {
}
override fun onError(e: IOException) {
}
})