Heim >Java >javaLernprogramm >Wie zeige ich benutzerdefinierte Objekte in einer JavaFX-ListView an?

Wie zeige ich benutzerdefinierte Objekte in einer JavaFX-ListView an?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-24 18:47:55525Durchsuche

How to Display Custom Objects in a JavaFX ListView?

Auffüllen einer ListView mit benutzerdefinierten Objekten in JavaFX

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.

Problemstellung

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).

Lösung

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());

Beispielanwendung

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn