Usare una custom ListCell in JavaFX

Mattepuffo's logo
Usare una custom ListCell in JavaFX

Usare una custom ListCell in JavaFX

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.

Lo step successivo è creare una classe che si occupa di creare un ListCell custom:

public class ComboListCell implements Callback<ListView, ListCell> {

    @Override
    public ListCell call(ListView tListView) {
        final ListCell cell = new ListCell() {
            @Override
            protected void updateItem(T item, boolean bln) {
                super.updateItem(item, bln);
                if (item != null) {
                    setText(item.toString());
                } else {
                    setText(null);
                }
            }
        };
        return cell;
    }
}

Infine nel nostro controller avremo una cosa del genere:

public class ControllerBook {

    @FXML
    private ComboBox comboAuthor;

    @FXML
    public void initialize() {
        List listAuthors = ...... // RIEMPI LA LISTA DI AUTHOR
        ObservableList authors = FXCollections.observableArrayList(listAuthors);
        comboAuthor.setItems(authors);
        comboAuthor.setCellFactory(new ComboListCell());
    }

}

Non ho messo come riempire la lista; potete farlo in qualsiasi modo vogliate, e non è importante ai fini dell'articolo.

L'importante è che abbiate una lista di Author.

Usando i Generics, non dobbiamo fare altro.

Enjoy!


Condividi

Commentami!