首页 > Java > java教程 > 如何在 JavaFX 中使用自定义对象在 ListView 中显示特定对象属性?

如何在 JavaFX 中使用自定义对象在 ListView 中显示特定对象属性?

Barbara Streisand
发布: 2024-10-25 05:22:02
原创
881 人浏览过

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

自定义对象如何在 JavaFX 中填充 ListView

在 JavaFX 中,可以使用 ObservableList 向 ListView 填充数据。使用自定义对象时,当 ListView 显示对象本身而不是对象的特定属性时,会出现一个常见的挑战。

要解决此问题,您可以利用 单元工厂。操作方法如下:

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());
        }
    }
});
登录后复制

通过提供自定义单元工厂,您可以指定 ListView 如何呈现每个项目。在本例中,我们指示 ListView 显示每个 Word 对象的 wordString 属性,提供所需的输出。

这是一个完整的示例应用程序:

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);
    }
}
登录后复制

此增强的解决方案满足您使用自定义对象填充 ListView 并同时显示这些对象的特定属性的要求。

以上是如何在 JavaFX 中使用自定义对象在 ListView 中显示特定对象属性?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板