Sono un po 'nuovo in Java, JavaFX e programmazione in generale, e ho un problema che mi sta rompendo il cervello.Come è possibile popolare un controllo ListView in JavaFX utilizzando oggetti personalizzati?
Nella maggior parte dei tutorial che hanno guardato su per quanto riguarda la compilazione di un controllo ListView (Utilizzando un ObservableArrayList, più precisamente) il modo più semplice per farlo è quello di rendere da un ObservableList di stringhe, in questo modo:
ObservableList<String> wordsList = FXCollections.observableArrayList("First word","Second word", "Third word", "Etc.");
ListView<String> listViewOfStrings = new ListView<>(wordsList);
Ma non voglio usare le stringhe. Vorrei utilizzare un oggetto personalizzato che ho fatto chiamato Parole:
ObservableList<Word> wordsList = FXCollections.observableArrayList();
wordsList.add(new Word("First Word", "Definition of First Word");
wordsList.add(new Word("Second Word", "Definition of Second Word");
wordsList.add(new Word("Third Word", "Definition of Third Word");
ListView<Word> listViewOfWords = new ListView<>(wordsList);
Ogni oggetto Word ha solo 2 proprietà: wordString (una stringa della parola), e la definizione (un'altra stringa che è la definizione della parola). Ho getter e setter per entrambi.
Potete vedere dove questo sta continuità aziendale il codice compila e funziona, ma quando lo mostro nella mia domanda, invece di visualizzare i titoli di ogni parola in ListView, visualizza l'oggetto di Word come una stringa!
Image showing my application and its ListView
mia domanda qui è, in particolare, c'è un modo semplice per riscrivere questo:
ListView<Word> listViewOfWords = new ListView<>(wordsList);
In modo tale che, piuttosto che prendere le parole direttamente da wordsList, si accede al wordString proprietà in ogni parola del mio observableArrayList?
Giusto per essere chiari, questo non è per Android, e l'elenco di parole verrà modificato, salvato e caricato alla fine, quindi non posso semplicemente creare un altro array per contenere il wordString. Ho fatto un po 'di ricerche sul web e sembra esserci una cosa chiamata "Cell Factories", ma sembra inutilmente complicata per quello che sembra essere un problema così semplice, e come ho affermato prima, sono un po' un principiante quando si tratta di programmazione.
Qualcuno può aiutare? Questa è la mia prima volta qui, quindi mi dispiace se non ho incluso abbastanza del mio codice o ho fatto qualcosa di sbagliato.
Grazie mille per la tua risposta molto dettagliata! Per ora ho intenzione di provare a sovrascrivere il metodo toString(), ma ho intenzione di fare un po 'più di lettura su Fabbrica celle per comprenderli meglio, e quindi modificare l'applicazione per usarli invece come da tuo suggerimento. Modificherò solo la 'definizione' di ogni singola parola con quel pulsante di modifica, e la vista elenco traccia solo la proprietà 'parola', quindi non è necessario tenere traccia delle modifiche alla 'definizione'. –