Tornadofx是基于JavaFx的一个kotlin实现的框架

之后看情况补充..

1.读取resources文件夹中的文件

如图

想要读取config.properties文件,有两种方法

在class文件中,可以这样写

//获得输入流
val resourceAsStream = javaClass.classLoader.getResourceAsStream("config.properties")

在MainView.kt文件,可以这样写:

//需要 “/”
val steam = resources.stream("/config.properties")

2.设置窗口的标题、图标、窗口大小

新建一个resources文件夹,将此文件夹设置为resources文件夹

class MainView : View() {
override val root = vbox {
//设置标题
title = "这是标题"
//设置图标
addStageIcon(Image("img/file.png"))
//设置窗口大小
setPrefSize(500.0, 400.0)
}
}

开发者推荐写在init方法里:

class MainView : View() {
init {
title = "APK签名验证破解工具 by star-sone"
setStageIcon(Image("img/file.png"))
}
override val root = vbox {
//设置窗口大小
setPrefSize(500.0, 400.0)
}
}

设置标题还可以这样设置:

class MainView : View("这是标题") {
override val root = vbox {
...
}
}

3.文字与按钮

文字的常用样式设置

text("hello"){
//设置方向
alignment = Pos.TOP_CENTER
style {
//设置加粗
fontWeight = FontWeight.BOL
//字体大小,第二个参数是单位,一个枚举类型
fontSize = Dimension(18.0, Dimension.LinearUnits.px)
//设置颜色,c方法是tornadofx中的提取颜色方法
fill= c("red")
}
}

文字按钮

override val root = vbox {
button("按钮")
}

按钮点击

override val root = vbox {
button("按钮"){
//设置最小宽度使用默认,不然会出现省略号
setMinSize(Button.USE_PREF_SIZE, Button.USE_PREF_SIZE)
action{
println("点击按钮")
}
}
}

图片按钮

override val root = vbox {
button(){
graphic = imageview("img/file.png") {
//设置大小
fitHeight = 30.0
fitWidth = 30.0
}
setOnAction{
println("点击按钮")
}
}
}

按钮样式

override val root = vbox {
button("按钮"){
style {
//设置背景颜色
backgroundColor += c("#66bef1")
//设置按钮文字颜色
textFill = c("white")
//粗体
fontWeight = FontWeight.BOLD
//字体大小,第二个参数是单位,一个枚举类型
fontSize = Dimension(20.0, Dimension.LinearUnits.px)
}
setOnAction{
println("点击按钮")
}
}
}

4.表单

登录界面

override val root = vbox {
form{
fieldset {
field("用户名") {
textfield()
}
field("密码") {
passwordfield()
}
}
}
}

获取输入框的数值

class MainView : View("Hello TornadoFX") {
//两种写法都可以
var userTf: TextField by singleAssign()
var passwordTf by singleAssign<TextField>() override val root = vbox {
form{
fieldset {
field("用户名") {
userTf = textfield()
}
field("密码") {
passwordTf = passwordfield()
}
field(){
button("登录"){
println(usetTf.text)//用户名
println(passwordTf.text)//密码 //登录操作...
}
}
}
}
}

输入框取消默认选中

JavaFx中,第一个输入框TextField会默认被选中,有时候不希望被选中,可以设置isFocusTraversable = false,如果希望全部输入框不被选中,则全部的输入框都是设置上面的那个属性

class MainView : View("Hello TornadoFX") {
//两种写法都可以
var userTf: TextField by singleAssign()
var passwordTf by singleAssign<TextField>() override val root = vbox {
form{
fieldset {
field("用户名") {
userTf = textfield(){
//设置此属性
isFocusTraversable = false
}
}
field("密码") {
passwordTf = passwordfield()
}
field(){
button("登录"){
println(usetTf.text)//用户名
println(passwordTf.text)//密码 //登录操作...
}
}
}
}
}

表单验证

//创建验证器
val context = ValidationContext() //需要验证的控件,一般是对输入框
val input = TextField() //验证是否符合条件,输入框不能为空
val validator = context.addValidator(input, input.textProperty()) {
//这里的it就是代表了该输入框的数值
if(it.isNullOrBlank()){
//输入框为空,则弹出此信息
error("输入不能为空")
}else{
null
}
}
//返回是否通过验证的结果,这里可以在button按钮的点击事件触发
val result = context.validtate()

固定大小的文本

有时候需要固定大小的文本,文字超过此宽度,后面的会以省略号来隐藏,这个时候可以使用Label,不过考虑到用户友好度,我们可以加个悬浮窗以便用户可以查看文本的全部内容

label("hello"){
prefWidth = 100.0
//鼠标悬浮在上面可以显示提示框
tooltip = Tooltip(this.text)
}

5.居中

override val root = vbox {
hbox{
alignment = Pos.CENTER
button("按钮")
}
}

我没有设置hbox大小,所有hbox大小和button高度一样,实现了水平居中

6.单选框

我这里用了Kfoenix,jfxradiobutton是Kfoenix中的控件,jfxradiobutton和radiobutton一样

override val root = vbox {
togglegroup {
jfxradiobutton("选项1") {
isSelected = true
setOnAction { }
}
jfxradiobutton("选项2") {
setOnAction { }
}
jfxradiobutton("选项3") {
setOnAction { }
}
}
}

7.菜单栏

override val root = vbox {
menubar {
menu("帮助") {
item("关于") {
//设置点击事件
setOnAction { }
}
}
menu("文件"){ }
}
...
}

8.打开新窗口

内部窗口

button("Open editor") {
action {
openInternalWindow(Editor::class)
}
}

新窗口

find(AboutView::class).openModal()

9.View传递数据

10.显示隐藏

比如有一个按钮默认是禁用的,只有当某个单选框被选中的时候,,这个按钮才会启用

val radiobutton = radiobutton(){

}

button{
disable{
radiobutton.isSelected
}
}

11.实时视图

由于是使用kotlin来开发界面,所有,没有像之前那样使用fxml可以直接预览界面,但是,开发提供了一个实时视图,方便我们在debug模式可以快速看到界面,无需重启应用程序

配置

有两种配置方式

1.MyApp中添加如下代码

class MyApp: App(MainView::class,Styles::class){
init {
reloadViewsOnFocus()
}
}

2.在debug配置中添加一个参数--alive-views



使用

修改View,之后按下Ctrl+F9,等待重载完成,应用的界面就会发生变化

PS:同理还有个--live-stylesheets参数(对应reloadStylesheetsOnFocus方法),用来开启样式的热更新

12.css样式

内联样式

override val root = vbox {
button{
style {
backgroundColor += c("blue")
}
}
}

定义css文件

package com.wan.noveldownloader.app

import javafx.scene.text.FontWeight
import tornadofx.* class Styles : Stylesheet() {
companion object {
val MyTab by cssclass()
} init { MyTab{
backgroundColor += c("#64b7ea")
//伪标签,悬浮
and(hover){
backgroundColor+=c("#6495ED")
} }
}
}

使用addClass方法添加

button{
addClass(Styles.MyTab)
}

13.单选框 RadioButton

点击按钮输出选中的radioButton的userData数据

PS:userData可以是任意类型

import javafx.scene.control.ToggleGroup
import tornadofx.* class TestView : View("My View") {
var toggle by singleAssign<ToggleGroup>()
override val root = vbox {
toggle = togglegroup {
radiobutton("是") {
userData = 0
}
radiobutton("否") {
isSelected = true
userData = 1
}
}
button {
action {
//输出选中button的userData数据
println(toggle.selectedToggle.userData)
}
}
}
}

TornadoFx学习笔记(1)——常用的代码片段的更多相关文章

  1. IOS开发-OC学习-常用功能代码片段整理

    IOS开发-OC学习-常用功能代码片段整理 IOS开发中会频繁用到一些代码段,用来实现一些固定的功能.比如在文本框中输入完后要让键盘收回,这个需要用一个简单的让文本框失去第一响应者的身份来完成.或者是 ...

  2. python3.4学习笔记(六) 常用快捷键使用技巧,持续更新

    python3.4学习笔记(六) 常用快捷键使用技巧,持续更新 安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器.IDLE默认不能显示行号,使 ...

  3. Python学习笔记之常用函数及说明

    Python学习笔记之常用函数及说明 俗话说"好记性不如烂笔头",老祖宗们几千年总结出来的东西还是有些道理的,所以,常用的东西也要记下来,不记不知道,一记吓一跳,乖乖,函数咋这么多 ...

  4. IOS开发效率之为Xcode添加常用的代码片段

    IOS开发效率之为Xcode添加常用的代码片段 原文地址:http://blog.csdn.net/pingchangtan367/article/details/30041285 tableview ...

  5. python3.4学习笔记(十) 常用操作符,条件分支和循环实例

    python3.4学习笔记(十) 常用操作符,条件分支和循环实例 #Pyhon常用操作符 c = d = 10 d /= 8 #3.x真正的除法 print(d) #1.25 c //= 8 #用两个 ...

  6. 常用JS代码片段

    1.隐藏部分数字,如手机号码,身份证号码 1 2 3 function (str,start,length,mask_char){ return str.replace(str.substr(star ...

  7. java web jsp学习笔记--概述-常用语法,指令,动作元素,隐式对象,域对象

     JSP学习笔记 1.什么是jsp JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP/Servlet规范.JS ...

  8. WebGL three.js学习笔记 创建three.js代码的基本框架

    WebGL学习----Three.js学习笔记(1) webgl介绍 WebGL是一种3D绘图协议,它把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的 ...

  9. 学习笔记:python3,代码。小例子习作(2017)

    http://www.cnblogs.com/qq21270/p/7634025.html 学习笔记:python3,一些基本语句(一些基础语法的代码,被挪到这里了) 日期和时间操作 http://b ...

  10. 学习笔记:python3,代码。小例子习作

    http://www.cnblogs.com/qq21270/p/7634025.html 学习笔记:python3,一些基本语句(一些基础语法的代码,被挪到这里了) 日期和时间操作 http://b ...

随机推荐

  1. HDU 1698 Just a Hook (线段树模板题-区间求和)

    Just a Hook In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of t ...

  2. tf.contrib.learn.preprocessing.VocabularyProcessor()

    tf.contrib.learn.preprocessing.VocabularyProcessor (max_document_length, min_frequency=0, vocabulary ...

  3. Linux 内核kobject 层次, kset, 和子系统

    kobject 结构常常用来连接对象到一个层级的结构中, 匹配正被建模的子系统的结构. 有 2 个分开的机制对于这个连接: parent 指针和 ksets. 在结构 kobject 中的 paren ...

  4. 配置nutch

    配置nutch (nutch文件夹已在/home目录下) 1. 修改系统环境变量 sudo gedit /etc/profile //增加 #set nutch export PATH=/home/n ...

  5. codeforces 1185G1 状压dp

    codeforces 1185G1. Playlist for Polycarp (easy version)(动态规划) 传送门:https://codeforces.com/contest/118 ...

  6. qt添加cef库嵌入web,linux 下Qt WebEngine 程序打包简单记录

    http://www.cnblogs.com/oloroso/p/6051631.html http://www.cnblogs.com/oloroso/p/6149000.html

  7. Vue____实现本地代码推送到云端仓库的相关操作

    项目初始化搭建完毕,每进行一个功能模块开发的必备操作,目的是方便协同开发以及备份代码 一.每开发一个新功能,都应该创建一个新分枝,待该功能模块开发完成以后,再合并到主分支master中,具体步骤如下: ...

  8. 21.python的模块(Module)和包(Package)

    目录 模块(Module)和包(Package) 模块(modue)的概念 模块导入方法 1.import 语句 2.from-import 语句 3.from-import* 语句 4.运行本质 i ...

  9. js中时间戳转换成xxxx-xx-xx xx:xx:xx类型日期格式的做法

    1.十三位数字的时间戳转换方法 var time = new Date(datetime).toLocaleString().replace(/年|月/g, "-").replac ...

  10. ELK学习实验013:ELK的一个完整的配置操作

    前面做了关于ELK组件的各个实验,但是并没有真正的把各个组件结合起来做一个实验,现在使用一个脚本简单的生成日志,模拟生产不断产生日志的效果 一 流程说明 使用脚本产生日志,模拟用户的操作 日志的格式 ...