如何将fx:id用于kotlin / tornadofx中的选项卡内容?

时间:2019-05-08 15:09:48

标签: javafx kotlin fxml tornadofx

使用以下代码总是以以下结尾:

Caused by: kotlin.UninitializedPropertyAccessException: lateinit property textArea has not been initialized
    at kam.applogviewer.main.LogTab.setContent(LogTab.kt:20)

当我致电LogTab::setContent(lines)时会发生这种情况。 也许这不是在tornadofx中的选项卡上使用FXML的正确方法?

MainView.kt(摘要):

class MainView : View("Example")
{
    ...

    fun showFileContent(fileName: String, lines: List<String>)
    {
        val logTab = LogTab(fileName, lines)
        tabPane.tabs.add(logTab)
        tabPane.selectionModel.select(logTab)

        // this call raises the exception
        logTab.setContent(lines)
    }
}

LogTab.kt:

package example.applogviewer.main

import javafx.fxml.FXML
import javafx.fxml.FXMLLoader
import javafx.scene.control.Tab
import javafx.scene.control.TextArea

class LogTab(fileName: String, lines: List<String>) : Tab(fileName)
{
    @FXML
    lateinit var textArea: TextArea

    init
    {
        content = FXMLLoader.load(this.javaClass.getResource("LogTab.fxml"))
    }

    fun setContent(lines: List<String>)
    {
        textArea.text = "I like to see this text."
    }
}

LogTab.fxml:

<?xml version="1.0" encoding="UTF-8"?>


<?import javafx.scene.control.TextArea?>
<TextArea xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml" fx:id="textArea"/>

1 个答案:

答案 0 :(得分:0)

使用$stmt = $mysqli->prepare("SELECT * FROM members WHERE phone = ?"); $stmt->bind_param("s", $providedphone); $stmt->execute(); // bind returned columns to PHP variables // as I dont know what your column names are this is just an example $stmt->bind_result($name, $code); // this will fetch the columns into the PHP varibles $stmt->fetch(); 委托为UI组件的根节点加载FXML,并使用by fxml()委托访问从FXML生成的UI组件。您无需在TornadoFX中使用by fxid()批注。您还必须永远不要手动实例化UIComponent实例,而使用@FXMLfind

请阅读https://github.com/edvin/tornadofx-guide/blob/master/part1/10.%20FXML.md以获得完整的说明,并考虑放弃FXML以使用更好的替代方法:键入安全生成器。