Come utilizzare correttamente le classi JavaFX TableView e ObservableList?


Ho una classe in cui ricevo una struttura di raccolta:

public class YIFY {

    private static List<Pelicula> resultados;

    public static void setResultados(List<Pelicula> resultados) {
        YIFY.resultados = resultados;
    }

}

Successivamente, in un'altra classe I associa il contenuto di tale List a un TableView. Tuttavia creo un FXCollections.observableArrayList() che è impostato come elemento di bind alla tabella.

Ecco come lo faccio:

    peliculas = FXCollections.observableArrayList(YIFY.getResultados());

    tituloColumn.setCellValueFactory(new PropertyValueFactory<>("titulo"));
    calidadColumn.setCellValueFactory(new PropertyValueFactory<>("calidad"));
    imdbColumn.setCellValueFactory(new PropertyValueFactory<>("imdbLink"));
    añoColumn.setCellValueFactory(new PropertyValueFactory<>("año"));
    tableResultados.setItems(peliculas);

Dove tableResultados è un TableView e peliculas dichiarato come un ObservableList<Pelicula> naturalmente non inizializzato.

Quello che odio e penso che non sia così OK è che quando ho bisogno di cambiare/aggiornare resultados a YIFY classe, ho anche bisogno di fare:

peliculas.clear();
peliculas.setAll(YIFY.getResultados());

Penso che tutto dovrebbe essere un Observable fin dall'inizio alla classe YIFY, quello che ho provato ma ho avuto MOLTI problemi in quanto non ho trovato lungo i documenti Java un'implementazione di classe corretta che non fosse astratta, quindi non avrei dovuto implementare alcun metodo aggiuntivo.

Come posso gestire questo? Il mio approccio è ok?

Author: diegoaguilar, 2014-05-19

1 answers

Non sono sicuro di capire davvero la domanda, ma cosa c'è di sbagliato in

public class YIFY {
    private static ObservableList<Pelicula> resultados = FXCollections.observableArrayList();

    public static void setResultados(List<Pelicula> resultados) {
        YIFY.resultados.setAll(resultados);
    }
}
 1
Author: James_D, 2014-05-20 23:57:34