2017-09-26 72 views
2

我正在学习如何使用kotlin并开始使用tornadoFX。我正在阅读指南,试图去学习它,但是我无法弄清楚'TreeView中的不同类型'是什么意思。它似乎说我应该使用星形投影,正如我在通话中使用*时所了解的那样。如何使用TornadoFX树视图显示数据

但是当我这样做时,TreeView说,“预测是不允许的功能类型参数和属性”

这是我的代码:

类的MainView:视图(“”) {

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 
     } } 

} 

我真的很难过,我不知道我打算干什么。

此外,如果任何人能为我提供的学习都科特林和tornadoFX一些有用的链接,将不胜感激:)

+0

我从来没有注意到在指南中使用星形投影的建议。我倾向于为我所有的树项目使用通用界面。 – melston

回答

2

看来导向实际上是不正确。我得到它使用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 
     } 
    } 
}