如何定义ListView应该使用哪个属性来呈现

罗马爵士

我有一个Java bean对象列表,我想在ListView控件中显示它。默认情况下,ListView使用toString方法。

如何定义要在ListView中呈现的属性?

我想要实现与PropertyValueFactory在以下代码中可以实现的TableView中相同的功能:

@FXML
private TableView<Person> mainTableView;
//...
TableColumn<Person,String> personColumn = new TableColumn<>("Name");List
personColumn.setCellValueFactory(new PropertyValueFactory("name"));
mainTableView.getColumns().add(personColumn);

编辑

似乎没有简单的(开箱即用的)解决方案。基于James_D的代码,我创建了通用类来解决该问题。它包装了PropertyValueFactory-请注意,PropertyValueFactory首先会寻找试图变得可观察的方法[NAME] Property(),仅当找不到它时才尝试访问标准bean属性。

public class PropertyValueFactoryWrapperCellFactory<T> implements Callback<ListView<T>, ListCell<T>> {

    private final PropertyValueFactory<T, String> pvf;

    public PropertyValueFactoryWrapperCellFactory(String propertyName) {
        super();
        pvf = new PropertyValueFactory(propertyName);
    }

    @Override
    public ListCell<T> call(ListView<T> param) {
        return new ListCell<T>() {
            @Override
            public void updateItem(T item, boolean empty) {
                super.updateItem(item, empty);
                textProperty().unbind();
                if (item == null) {
                    return;
                }
                TableColumn.CellDataFeatures<T, String> cdf = new TableColumn.CellDataFeatures<>(null, null, item);
                textProperty().bind(pvf.call(cdf));
            }
        };
    }

}

用法:

@FXML
private ListView<Person> mainListView;
//...
mainListView.setCellFactory(new PropertyValueFactoryWrapperCellFactory("name"));
詹姆斯·D

使用细胞工厂。

如果该属性是不可变的,则非常简单:

ListView<MyDataType> listView = new ListView<>();
listView.setCellFactory(new Callback<ListView<MyDataType>, ListCell<MyDataType>>() {
    @Override
    public ListCell<MyDataType> call(ListView<MyDataType> lv) {
        return new ListCell<MyDataType>() {
            @Override
            public void updateItem(MyDataType item, boolean empty) {
                super.updateItem(item, empty);
                if (item == null) {
                    setText(null);
                } else {
                    // assume MyDataType.getSomeProperty() returns a string
                    setText(item.getSomeProperty());
                }
            }
        };
    }
});

如果属性可以更改其值,并且列表视图需要响应这些更改而动态更新,则需要绑定textProperty列表单元格的:

listView.setCellFactory(new Callback<ListView<MyDataType>, ListCell<MyDataType>>() {
    @Override
    public ListCell<MyDataType> call(ListView<MyDataType> lv) {
        return new ListCell<MyDataType>() {
            @Override
            public void updateItem(MyDataType item, boolean empty) {
                super.updateItem(item, empty);
                textProperty().unbind();
                if (item != null) {
                    // assumes MyDataType.someProperty() returns a StringProperty:
                    textProperty.bind(item.someProperty());
                }
            }
        };
    }
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我应该选择哪个属性来设置“文本”HTML 元素?

我应该使用哪个API或库来获取JSON对象

我应该使用哪个提升课程来存储人类年龄

应该使用哪个标签来包含多个元素

我应该使用哪个 eclipse 安装来进行 python 开发?

如何知道应该使用哪个cuDNN版本?

Java:如何使用 Param 来呈现类

无法在ListView中使用UWP中的自定义控件来绑定属性

不要仅使用定义来呈现SVG元素

如何使用在属性中带有“-”的html DOM来解析用户定义的html属性?

仅当父 div 具有特定属性时,如何在 Vue.js 中使用“v-if”来呈现 <span> ?

如何在Spring中检查SFTP连接成功与否(使用try catch)?我应该使用哪个库来检查Spring中的SFTP连接?

我应该使用“ this”来调用类的属性,成员或方法吗?

当通过 Fluent API 定义 EF 映射中的哪个子属性应该被忽略时,抛出 ArgumentException

linux如何知道应该使用哪个irq号?

npm/Frameworks/ 如何知道我应该使用哪个版本?

Activerecord如何“知道”它应该使用哪个适配器?

OAuth 2.0 服务器如何知道在客户端身份验证期间应该使用哪个密钥来解析 jwt 令牌?(client_secret_jwt)

如何定义键盘事件的keyCode或哪个或键或代码属性

我应该使用哪个IQueryable或IEnumerable来不将行放入内存中?

我应该使用哪个 Android 设备来调试 USB 主机模式?

我应该使用哪个证书来签名我的Mac OS X应用程序?

我应该使用哪个Qt类来表示矩形上的图像?

应该使用哪个运算符(+ vs + =)来提高性能?(就地与非就地)

我应该使用哪个API来检测用户何时在Android中行走?

我应该使用哪个WindowBuilder Swing小部件来显示System.out“控制台”?

我应该使用哪个文件系统来格式化我的外部备份硬盘?btrfs?

我应该使用哪个Java集合来实现线程安全的缓存?

应该使用哪个Java库来准备人脸检测应用程序