Kotlin | Tornadofx:如何在另一个fxml屏幕上单击鼠标时打开新的fxml屏幕

我有一个非常简单的任务,但是做不到。

我有Kotlin | Tornadofx应用程序。

我打开fxml屏幕:

class MainView : View() {
    override val root : VBox by fxml("/Screen 1.fxml")
}

Screen1.fxml中有一个按钮。我需要该应用打开在Screen1.fxml中按下的按钮上的另一个屏幕(Screen2.fxml)。

我被这个卡住了。通过onaction =“#FunctiondefinedinmainView”从Screen1.fxml仅提供函数调用。但是只能通过

使用MainView交换视图
button("Go to Screen2") {
action {
replaceWith<Screen2>()
}

构造,我无法完成,因为我只能从Screen1.fxml中调用一个函数。而且MainView中没有按钮。

谢谢。

yunmengyao1_ 回答:Kotlin | Tornadofx:如何在另一个fxml屏幕上单击鼠标时打开新的fxml屏幕

首先,您应该在Screen 1.fxml文件中为按钮添加ID:

<Button fx:id="myButtonId">

然后,您可以在MainView中获得对该按钮的引用:

class MainView : View() {
    override val root: VBox by fxml("/Screen 1.fxml")
    val button: Button by fxid("myButtonId")
}

现在,您可以为按钮设置点击侦听器以替换屏幕:

class MainView : View() {
    override val root: VBox by fxml("/Screen 1.fxml")
    val button: Button by fxid("myButtonId")
    init {
        button.setOnAction {
            replaceWith<Screen2>()
        }
    }
}

我以前没有尝试过,但是应该可以,以防万一,请随时发表评论。

本文链接:https://www.f2er.com/2312828.html

大家都在问