封装TornadoFx常用控件库
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) {
}
})
封装TornadoFx常用控件库的更多相关文章
- [原创][开源]SunnyUI.Net, C# .Net WinForm开源控件库、工具类库、扩展类库、多页面开发框架
SunnyUI.Net, 基于 C# .Net WinForm 开源控件库.工具类库.扩展类库.多页面开发框架 Blog: https://www.cnblogs.com/yhuse Gitee: h ...
- QT常用控件(三)——自定义控件封装
引言 Qt已经提供了很多的基础控件供开发使用,而Qt原生的控件有时候并不能满足我们的需求,特别是在工业的运用上,比如我们需要一个日期时间的选择器,Qt虽然已经提供了原生的QDateTime控件,但这个 ...
- [深入浅出Windows 10]QuickCharts图表控件库解析
13.4 QuickCharts图表控件库解析 QuickCharts图表控件是Amcharts公司提供的一个开源的图表控件库,这个控件库支持WPF.Silverlight.和Windows等 ...
- Android support library支持包常用控件介绍(二)
谷歌官方推出Material Design 设计理念已经有段时间了,为支持更方便的实现 Material Design设计效果,官方给出了Android support design library ...
- 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) C#中缓存的使用 C#操作redis WPF 控件库——可拖动选项卡的TabControl 【Bootstrap系列】详解Bootstrap-table AutoFac event 和delegate的分别 常见的异步方式async 和 await C# Task用法 c#源码的执行过程
反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) 背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮 ...
- 国内开源C# WPF控件库Panuon.UI.Silver推荐
国内优秀的WPF开源控件库,Panuon.UI的优化版本.一个漂亮的.使用样式与附加属性的WPF UI控件库,值得向大家推荐使用与学习. 今天站长(Dotnet9,站长网址:https://dotne ...
- 国内开源C# WPF控件库Panuon.UI.Silver强力推荐
国内优秀的WPF开源控件库,Panuon.UI的优化版本.一个漂亮的.使用样式与附加属性的WPF UI控件库,值得向大家推荐使用与学习. 今天站长(Dotnet9,站长网址:https://dotne ...
- 《Dotnet9》系列-开源C# WPF控件库3《HandyControl》强力推荐
大家好,我是Dotnet9小编,一个从事dotnet开发8年+的程序员.我最近开始写dotnet分享文章,希望能让更多人看到dotnet的发展,了解更多dotnet技术,帮助dotnet程序员应用do ...
- 《Dotnet9》系列-开源C# WPF控件库2《Panuon.UI.Silver》强力推荐
时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...
- Win10 UWP开发系列——开源控件库:UWPCommunityToolkit
在开发应用的过程中,不可避免的会使用第三方类库.之前用过一个WinRTXamlToolkit.UWP,现在微软官方发布了一个新的开源控件库—— UWPCommunityToolkit 项目代码托管在G ...
随机推荐
- Firefox浏览器的一些配置
一.在新标签页打开书签 1.打开Firefox浏览器,地址栏输入about:config. 2.选择"接受风险并继续". 3.搜索browser.tabs.loadBookmark ...
- 如何使用 etcd 实现分布式 /etc 目录
etcd 是一款兼具一致性和高可用性的键值数据库,简单.安全.快速.可信,目前是 Kubernetes 的首要数据存储.我们先来看一段 etcd 官方对于名字的解释. The name "e ...
- 面试官:Sentinel是如何实现限流的?
限流是一种通过控制系统对外提供的资源.服务或接口的访问数量或速率,以保护系统免受过载的一种策略. 它的目的是确保系统能够在承受范围内提供稳定和可靠的服务,避免因过多的请求而导致系统崩溃.资源耗尽或响应 ...
- 一文搞懂 Vue3 defineModel 双向绑定:告别繁琐代码!
前言 随着vue3.4版本的发布,defineModel也正式转正了.它可以简化父子组件之间的双向绑定,是目前官方推荐的双向绑定实现方式. vue3.4以前如何实现双向绑定 大家应该都知道v-mode ...
- 初步体验通过 Semantic Kernel 与自己部署的通义千问开源大模型进行对话
春节之前被 Semantic Kernel 所吸引,开始了解它,学习它. 在写这篇博文之前读了一些英文博文,顺便在这里分享一下: Intro to Semantic Kernel – Part One ...
- Kubernetes 1.26.0实战:在本地配置k8s集群
阶段一:开发环境及版本 以下环境均来自官网: 本地宿主机环境:Windows 10 21H2 64位 虚拟机软件:VMware workstation 15.5 pro 虚拟机镜像版本:ubuntu- ...
- NC20240 [SCOI2005]互不侵犯KING
题目链接 题目 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案. 国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子. 输入描述 只有一行 ...
- NC16576 [NOIP2012]摆花
题目链接 题目 题目描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m 盆.通过调查顾客的喜好,小明列出了顾客最喜欢的n 种花,从1 到n 标号.为了在门口展出更多种花,规定第i ...
- MYSQL服务无法启动:InnoDB: .\ibdata1 can't be opened in read-write mode
今天在那做实验倒腾mysql数据库,后来发现服务无法启动,查看日志报错如下: 2015-01-07 17:48:54 9136 [ERROR] InnoDB: .\ibdata1 can't be o ...
- 使用winsw将jar包注册成windows服务
使用winsw将jar包注册成windows服务 注:exe文件作用:使用winsw将jar包注册成windows服务(下载地址https://github.com/winsw/winsw/relea ...

