Heim  >  Artikel  >  Java  >  Wie zeige ich bestimmte Objekteigenschaften in einer ListView mit benutzerdefinierten Objekten in JavaFX an?

Wie zeige ich bestimmte Objekteigenschaften in einer ListView mit benutzerdefinierten Objekten in JavaFX an?

Barbara Streisand
Barbara StreisandOriginal
2024-10-25 05:22:02790Durchsuche

How to Display Specific Object Properties in a ListView With Custom Objects in JavaFX?

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!

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