簡體   English   中英

Kotlin FXML文件控制器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM