Cara Objek Tersuai Boleh Mengisi ListView dalam JavaFX
Dalam JavaFX, ListView boleh diisi dengan data dengan menggunakan ObservableList. Apabila bekerja dengan objek tersuai, cabaran biasa timbul apabila ListView memaparkan objek itu sendiri dan bukannya sifat khusus daripada objek.
Untuk menyelesaikan isu ini, anda boleh memanfaatkan Kilang Sel. Begini caranya:
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()); } } });
Dengan menyediakan kilang sel tersuai, anda boleh menentukan cara ListView memaparkan setiap item. Dalam kes ini, kami mengarahkan ListView untuk memaparkan sifat wordString bagi setiap objek Word, memberikan output yang diingini.
Berikut ialah contoh aplikasi lengkap:
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); } }
Penyelesaian dipertingkat ini menangani keperluan anda untuk mengisi ListView dengan objek tersuai sambil memaparkan sifat khusus daripada objek tersebut.
Atas ialah kandungan terperinci Bagaimana untuk Memaparkan Sifat Objek Tertentu dalam ListView Dengan Objek Tersuai dalam JavaFX?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!