Wie benutzerdefinierte Objekte eine ListView in JavaFX füllen können
In JavaFX kann eine ListView mithilfe einer ObservableList mit Daten gefüllt werden. Bei der Arbeit mit benutzerdefinierten Objekten entsteht eine häufige Herausforderung, wenn die ListView das Objekt selbst anstelle einer bestimmten Eigenschaft des Objekts anzeigt.
Um dieses Problem zu lösen, können Sie eine Cell Factory nutzen. So geht's:
listViewOfWords.setCellFactory(param -> new 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()); } } });
Durch die Bereitstellung einer benutzerdefinierten Zellenfabrik können Sie angeben, wie die ListView jedes Element rendert. In diesem Fall weisen wir ListView an, die wordString-Eigenschaft jedes Word-Objekts anzuzeigen und die gewünschte Ausgabe bereitzustellen.
Hier ist eine vollständige Beispielanwendung:
import javafx.application.Application; import javafx.collections.FXCollections; import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.scene.control.ListView; import javafx.scene.control.TextField; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage stage) { // Create a list of Word objects 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")); // Create a ListView instance ListView<Word> listView = new ListView<>(wordsList); // Set the cell factory to display the wordString property listView.setCellFactory(param -> new 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()); } } }); // Create a scene to display the ListView VBox layout = new VBox(10); layout.setPadding(new Insets(10)); layout.getChildren().add(listView); Scene scene = new Scene(layout); stage.setScene(scene); stage.show(); } public static class Word { private String word; private 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); } }
Diese erweiterte Lösung erfüllt Ihre Anforderung, eine ListView mit benutzerdefinierten Objekten zu füllen und gleichzeitig eine bestimmte Eigenschaft dieser Objekte anzuzeigen.
Das obige ist der detaillierte Inhalt vonWie zeige ich bestimmte Objekteigenschaften in einer ListView mit benutzerdefinierten Objekten in JavaFX an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!