Heim >Java >javaLernprogramm >Wie zeige ich benutzerdefinierte Objekte in einer JavaFX-ListView an?
Bei der Arbeit mit JavaFX erfordert das Auffüllen einer ListView mit benutzerdefinierten Objekten einen etwas anderen Ansatz als die Verwendung von Strings. Dieser Artikel bietet eine detaillierte Lösung für dieses Problem.
Bei Verwendung einer ObservableArrayList von benutzerdefinierten Objekten in JavaFX zeigt die ListView die Objekte selbst als Strings an, anstatt sie zu extrahieren und anzuzeigen gewünschte Eigenschaft (z. B. ein Wort aus einem Word-Objekt).
Die Lösung besteht darin, eine Cell Factory in der ListView zu verwenden. Mit einer Cell Factory können Sie die Darstellung jeder Zelle in der ListView anpassen.
Schritt 1: Erstellen Sie eine Cell Factory
Erstellen Sie eine neue Klasse, die ListCell erweitert. In diesem Beispiel nennen wir es WordCell.
public class WordCell extends ListCell<Word> { @Override protected void updateItem(Word item, boolean empty) { super.updateItem(item, empty); if (empty || item == null || item.getWord() == null) { setText(null); } else { setText(item.getWord()); } } }
Schritt 2: Legen Sie die Cell Factory in der ListView fest
Weisen Sie die WordCell-Klasse als Cell Factory zu die ListView.
ListView<Word> listViewOfWords = new ListView<>(wordsList); listViewOfWords.setCellFactory(listViewOfWords.new WordCell());
Hier ist eine Beispielanwendung, die den beschriebenen Ansatz demonstriert:
import javafx.application.Application; import javafx.collections.*; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.stage.Stage; public class ListViewCustomObject extends Application { @Override public void start(Stage stage) { 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); listViewOfWords.setCellFactory(listViewOfWords.new WordCell()); stage.setScene(new Scene(listViewOfWords)); stage.show(); } public static class Word { private final String word; private final String definition; public Word(String word, String definition) { this.word = word; this.definition = definition; } public String getWord() { return word; } public String getDefinition() { return definition; } } public static void main(String[] args) { launch(args); } }
Durch Befolgen dieser Schritte können Sie Ihre ListView füllen mit benutzerdefinierten Objekten und zeigen Sie die gewünschten Eigenschaften in jeder Zelle an.
Das obige ist der detaillierte Inhalt vonWie zeige ich benutzerdefinierte Objekte in einer JavaFX-ListView an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!