相关疑难解决方法(0)

装饰 ObservableList 并保留更改事件的最佳实践

我的数据源提供了一个ObservableList<String>,但是对于我的 ListView 我需要一个ObservableList<Warning>.

AWarning基本上只是字符串的装饰器,添加一个布尔值以提供一种跟踪 ListView 复选框状态的方法,如本答案中所提议的。

class Warning {

    private final ReadOnlyStringWrapper name;
    private final BooleanProperty checked;

    /* ... */

}
Run Code Online (Sandbox Code Playgroud)

目前,我正在观察原始列表中的更改事件,并手动添加/删除警告列表中的项目:

ObservableList<String> stringList = ...;
ObservableList<Warning> warningList = ...;

stringList.addListener(new ListChangeListener<String>() {

    @Override
    public void onChanged(ListChangeListener.Change<? extends String> change) {
        if (change.wasAdded()) {
            warningList.addAll(change.getAddedSubList().stream().map(Warning::new).collect(Collectors.toList()));
        } else if (change.wasRemoved()) {
            change.getRemoved().forEach(str -> {
                warningList.removeIf(w -> str.equals(w.name));
            });
        }
    }

});
Run Code Online (Sandbox Code Playgroud)

我的问题是:是否有一种更优雅的方式来装饰我的字符串类型列表,以便它可以用作警告类型列表,而无需手动传递更改事件?

更准确地说:如果在原始列表中添加或删除字符串,我希望立即在警告列表中看到此更改,从而在 ListView 中看到此更改。

java design-patterns javafx

5
推荐指数
1
解决办法
1339
查看次数

标签 统计

design-patterns ×1

java ×1

javafx ×1