JavaFx学习笔记(一)第一个桌面程序与Kotlin

第一个桌面应用程序

Application

Application是一个程序的入口,基本等价于Android的Application:

1
2
3
4
5
6
7
import javafx.application.Application

class MyApplication : Application() {
override fun start(primaryStage: Stage) {
//舞台的交互代码
}
}

Application的启动必须在Java类的main方法中调用:(在Kotlin的main方法中无法识别)

1
2
3
4
5
public class AppEntrance {
public static void main(String[] args) {
Application.launch(MyApplication.class, args);
}
}

Stage

Stage就等于是一个窗口,它有一切窗口的要素:标题栏、内容等。

1
2
3
4
5
6
7
8
9
10
11
12
13
primaryStage.apply {
title = "My Window Title"
//场景大小
scene = Scene(root, 300.0, 300.0)
//是否最大化,是否占满屏幕
isMaximized = true
//是否可由用户控制窗口缩放
isResizable = true
//是否全屏(如果是,会挡住windows的任务栏)
isFullScreen = false
//点击窗口关闭按钮的回调方法
onCloseRequest = EventHandler<WindowEvent> { onApplicationExit() }
}.show()

Layout和FXMLLoader

布局文件的格式为.fxml,类似于Android中的xml,fxml也是一种xml。同时,Android有LayoutInflater,JavaFx有FXMLLoader。

1
2
3
val loader = FXMLLoader(javaClass.getResource("ui/layout_main.fxml"))
//读取layout的根ViewGroup
val root = loader.load<Parent>()

Controller

控制器类,顾名思义,布局文件的控制代码就放在里边,JavaFx使用的是MVC模式。

Controller与Layout绑定

控制器类与布局文件的绑定方式如下:

1
2
3
4
5
<?xml version="1.0" encoding="UTF-8"?>
<BorderPane xmlns="http://javafx.com/javafx/8.0.121" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="com.peceoqicka.ui.MainController">
<!-- 布局代码 -->
</BorderPane>

绑定之后可通过FXMLLoader得到:

1
val controller = loader.getController<MainController>()

获取View

在Controller中获取布局中的View的方式是,给相应的View绑定一个id:

1
<WebView fx:id="wvContent"/>

然后在Controller中使用与id相同的变量名定义一个public的变量即可:

1
2
3
4
5
import javafx.scene.web.WebView

class MainController {
lateinit var wvContent: WebView
}

事件绑定

在布局文件中相应控件上添加onAction字段,填写**#方法名**即可。

然后在Controller中定义一个public的方法:

1
2
3
fun onActionTips(actionEvent: ActionEvent) {
//actionEvent为有且仅有一个的参数
}