【发布时间】:2018-06-21 21:58:48
【问题描述】:
我正在尝试使用 Kotlin 和 JavaFX(TornadoFX) 制作基本的桌面应用程序,但我一直坚持为 FXML 文件设置控制器。 我在 git LINK to git 上遵循 edvin 的指南。
当按钮被点击时,程序应该增加标签中的数字。
问题是..
当我尝试使用如下所示的 FXML 文件时,我无法使用 onAction="#increment" 将该文件与控制器“连接”。
这将编译,但无法从 controller.kt 文件中调用增量函数。还有错误说“没有为顶级元素指定控制器”..
每当我尝试使用fx:controller=view.Controller 指定控制器时,代码甚至都无法编译,显示错误:
javafx.fxml.LoadException: Controller value already specified.
有人可以帮帮我吗?
这是 FXML 文件:
?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<BorderPane xmlns="http://javafx.com/javafx/null" xmlns:fx="http://javafx.com/fxml/1">
<padding>
<Insets top="20" right="20" bottom="20" left="20"/>
</padding>
<center>
<VBox alignment="CENTER" spacing="10">
<Label text="0">
<font>
<Font size="20"/>
</font>
</Label>
<Button text="Click to increment" onAction="#increment"/>
</VBox>
</center>
</BorderPane>
这是 MyApp.kt(主文件):
package app
import javafx.stage.Stage
import tornadofx.*
import view.MainView
class MyApp: App(MainView::class){
override val primaryView = MainView::class
override fun start(stage: Stage) {
stage.minHeight = 400.0
stage.minWidth = 600.0
super.start(stage)
}
}
这是 MainView.kt(视图):
package view
import javafx.scene.layout.BorderPane
import tornadofx.*
class MainView : View() {
override val root: BorderPane by fxml("/views/MainViewFXML.fxml" )
}
这是 Controller.kt(这应该用于控制 FXML 文件操作):
package view
class Controller {
fun increment(){
//code
}
}
【问题讨论】:
标签: java javafx kotlin tornadofx