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