Il componente ListView di TornadoFX, è molto simile alle ComboBox.

La differenza sostanziale è viene visualizzata come una lista a scorrimento invece che come una tendina.

In questo articolo abbiamo visto una introduzione in Kotlin a TornadoFX.

Oggi vediamo un'altra cosa interessante, e cioè come iniettare componenti dentro ad una View.

Partiamo dalle due View che fanno da top e bottom:

// TOP

import tornadofx.View
import tornadofx.label

class TopView: View() {
    override val root = label("Siamo al TOP!")
    lateinit var parent: MainView
}

Abbiamo la nostra bella TableView in JavaFX:

<TableView fx:id="tblBooks"
  BorderPane.alignment="CENTER"
  onKeyPressed="#deleteBook"/>

E vogliamo intercettare il tasto CANC / DEL, e di conseguenza compiere un'azione (generalmente cancellare riga).

Come fare?

Vogliamo riempire una ComboBox in JavaFX con oggetti custom: come possiamo fare?

Adesso lo vediamo, partendo proprio dall'oggetto custom:

public class Author {

    private String id;
    private String name;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return name;
    }

    @Override
    public boolean equals(Object obj) {
        if (!(obj instanceof Author)) {
            return false;
        }
        Author a = (Author) obj;
        return this.name.equals(a.toString());
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 59 * hash + (this.name != null ? this.name.hashCode() : 0);
        return hash;
    }

Nulla di trascendentale.

Quando usiamo un componente a griglia, ci viene quasi automatico allargare le colonne per vederne bene il contenuto.

Se siamo in ambito Qt, e vogliamo avere il ridimensionamento automatico delle colonne di una QTableWidget, come possiamo fare?