Usare le TreeView in TornadoFX e Kotlin
Oggi vediamo un altro componente di TornadoFXper Kotlin: le TreeView!
Partiamo da una classe Persona che ha due parametri: il nome e la squadra per cui tifa:
class Persona(val nome: String, val squadra: String)
Fin qui nulla di speciale.
Ma i componenti ad albero sono un pò più rognosi.
Considerate che ci sarà una prima voce "vuota" che funzione da radice; sotto visualiziamo tutte le squadre.
Ogni squadra è espandibile e mostra tutti i nomi che tifano quella squadra.
Ecco il codice:
import javafx.scene.control.TreeItem
import javafx.scene.control.TreeView
import tornadofx.*
class MainView : View() {
val persone = listOf(
Persona("marco", "roma"),
Persona("francesca", "juventus"),
Persona("caterina", "roma"),
Persona("sveva", "lazio"),
Persona("matteo", "roma"),
Persona("giulio", "napoli"),
Persona("federico", "milan"),
Persona("francesco", "juventus")
)
// LISTA UNIVOCA DI SQUADRE
val squadre = persone
.map { it.squadra }
.distinct().map { Persona(it, "") }
var tv: TreeView<Persona> by singleAssign()
override val root = vbox(10.0)
init {
with(root) {
this.setMaxSize(300.0, 300.0)
tv = treeview {
// RADICE DELL'ALBERO
root = TreeItem(Persona("VISUALIZZA", ""))
// RENDERIZIAMO IL NOME
cellFormat { text = it.nome }
// POPOLIAMO LA TREEVIEW
// SE parent CORRISPONDE ALLA root (IL PRIMO) VISUALIZIAMO
// LA VOCE IMPOSTATA SOPRA
// SENNÒ VISUALIAMO I NOMI NELLE CORRISPETTIVE SQUADRE
populate { parent ->
if (parent == root) squadre else persone.filter {
it.squadra == parent.value.nome
}
}
}
}
}
}
Il codice è commentato, e dovrebbe essere abbastanzo chiaro.
Enjoy!
kotlin treeview tornadofx
Commentami!