Nano Hash - криптовалюты, майнинг, программирование

Как отображать данные с помощью TornadoFX treeview

Я учусь использовать kotlin и начал использовать tornadoFX. Я просматриваю руководство, пытаясь изучить его, однако не могу понять, что имеется в виду в «TreeView с различными типами». Кажется, это говорит о том, что я должен использовать звездную проекцию, которая, насколько я знаю, когда вы используете * в вызове.

Однако, как только я это сделаю, в древовидной структуре появится сообщение, что «проекции не допускаются для аргументов типа функций и свойств».

Это мой код:

class MainView: View ("") {

override val root = treeview<*> {
        root = TreeItem(Person("Departments", ""))

        cellFormat {
            text = when (it) {
                is String -> it
                is Department -> it.name
                is Person -> it.name
                else -> throw IllegalArgumentException("Invalid Data Type")
            }
        }

        populate { parent ->
            val value = parent.value
            if (parent == root) departments
            else if (value is Department) persons.filter { it.department == value.name }
            else null
        } }

}

Честно говоря, я в тупике, я не знаю, что мне предназначено делать.

Также, если бы кто-нибудь еще мог предоставить мне несколько полезных ссылок для изучения Kotlin и tornadoFX, я был бы очень признателен :)


  • Рекомендаций по использованию проекции звезды в путеводителе я так и не заметил. Я стремился использовать общий интерфейс для всех элементов дерева. 26.09.2017

Ответы:


1

Кажется, что руководство на самом деле неверно. Я получил его, используя treeview<Any>:

data class Department(val name: String)
data class Person(val name: String, val department: String)

val persons = listOf(
        Person("Mary Hanes", "Marketing"),
        Person("Steve Folley", "Customer Service"),
        Person("John Ramsy", "IT Help Desk"),
        Person("Erlick Foyes", "Customer Service"),
        Person("Erin James", "Marketing"),
        Person("Jacob Mays", "IT Help Desk"),
        Person("Larry Cable", "Customer Service")
)

val departments = persons.groupBy { Department(it.department) }

override val root = treeview<Any> {
    root = TreeItem("Departments")
    cellFormat {
        text = when (it) {
            is String -> it
            is Department -> it.name
            is Person -> it.name
            else -> kotlin.error("Invalid value type")
        }
    }
    populate { parent ->
        val value = parent.value
        when {
            parent == root -> departments.keys
            value is Department -> departments[value]
            else -> null
        }
    }
}
26.09.2017

2

Я подумал, что хочу вообще бросить tornadofx, когда этот пост спас мне жизнь. В моем случае я хотел отобразить вложенные списки объекта. Я не ожидал, что что-то вроде else -> null понадобится для предотвращения переполнения стека. Каким-то образом я оказался в этом блоке заполнения, который теперь работает для меня.

populate { parent -> val value = parent.value 
when
{
    parent == root -> quotation.houses
    value is NewHouse -> value.rooms
    else -> null
}}
17.07.2019
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..