Usare le TreeView in TornadoFX e Kotlin

Mattepuffo's logo
Usare le TreeView in TornadoFX e Kotlin

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!


Condividi

Commentami!