繁体   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