Как использовать fx: id для содержимого вкладок в kotlin / tornadofx? - PullRequest
0 голосов
/ 08 мая 2019

Использование следующего кода всегда заканчивается на:

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

Это происходит, когда я звоню LogTab::setContent(lines).Может быть, это неправильный способ использовать FXML с вкладкой в ​​Tornadofx?

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 голосов
/ 08 мая 2019

Вы загружаете FXML для корневого узла для компонента пользовательского интерфейса с помощью делегата by fxml() и получаете доступ к компонентам пользовательского интерфейса, сгенерированным из FXML, с помощью делегата by fxid().Вы не используете аннотацию @FXML в TornadoFX.Вы также никогда не должны создавать экземпляры UIComponent вручную, используйте find или inject.

. Пожалуйста, прочитайте https://github.com/edvin/tornadofx-guide/blob/master/part1/10.%20FXML.md для полного объяснения, а также рассмотрите возможность отказа от FXML в пользу гораздо более лучшей альтернативы:Введите Safe Builders.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...