[英]Kotlin FXML file controller
我正在嘗試使用Kotlin和JavaFX(TornadoFX)制作基本的桌面應用程序,但是我仍然堅持為FXML文件設置控制器。 我正在遵循edvin上關於git LINK的指南。
單擊“ ewer”按鈕時,程序應增加標簽中的數字。
問題是..當我嘗試使用下面顯示的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
}
}
在TornadoFX中,視圖是控制器。 將View子類視為View Controller。 對View中的UI事件做出反應,並將業務邏輯傳遞給ViewModel或Controller子類。
將您的increment
函數放在MainView
,它將被稱為:)刪除fx:controller=view.Controller
屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.