Maison > Java > javaDidacticiel > Comment afficher les propriétés d'objets spécifiques dans un ListView avec des objets personnalisés dans JavaFX ?

Comment afficher les propriétés d'objets spécifiques dans un ListView avec des objets personnalisés dans JavaFX ?

Barbara Streisand
Libérer: 2024-10-25 05:22:02
original
879 Les gens l'ont consulté

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

Comment des objets personnalisés peuvent remplir un ListView dans JavaFX

Dans JavaFX, un ListView peut être rempli de données à l'aide d'une ObservableList. Lorsque vous travaillez avec des objets personnalisés, un défi courant survient lorsque ListView affiche l'objet lui-même au lieu d'une propriété spécifique de l'objet.

Pour résoudre ce problème, vous pouvez tirer parti d'une Cell Factory. Voici comment :

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());
        }
    }
});
Copier après la connexion

En fournissant une fabrique de cellules personnalisée, vous pouvez spécifier comment ListView restitue chaque élément. Dans ce cas, nous demandons à ListView d'afficher la propriété wordString de chaque objet Word, fournissant le résultat souhaité.

Voici un exemple d'application complet :

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);
    }
}
Copier après la connexion

Cette solution améliorée répond à votre besoin de remplir un ListView avec des objets personnalisés tout en affichant une propriété spécifique de ces objets.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal