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!
java javafx listcell listview combobox
Commentami!