2017-09-26 71 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 
     } 
    } 
}