Data binding 如何使JavaFXListProperty只能通过自定义方法进行修改
我有一个私人名单,我不希望它可以从外面修改一般。仅当对象有效时,才允许从外部添加。因此,我过去常常这样写:Data binding 如何使JavaFXListProperty只能通过自定义方法进行修改,data-binding,javafx,unmodifiable,listproperty,Data Binding,Javafx,Unmodifiable,Listproperty,我有一个私人名单,我不希望它可以从外面修改一般。仅当对象有效时,才允许从外部添加。因此,我过去常常这样写: private List<Object> list = new ArrayList<>(); public List<Object> getList() { return Collections.unmodifiableList(list); } public void addObject(Object object) { if (i
private List<Object> list = new ArrayList<>();
public List<Object> getList()
{
return Collections.unmodifiableList(list);
}
public void addObject(Object object)
{
if (isObjectValid(object)) //any validation
list.add(object);
}
private List=new ArrayList();
公共列表getList()
{
返回集合。不可修改列表(列表);
}
公共无效添加对象(对象)
{
if(isObjectValid(object))//任何验证
列表。添加(对象);
}
现在,出于JavaFX的目的,我将列表转换为一个属性:
private ListProperty<Object> list =
new SimpleListProperty<>(FXCollections.observableArrayList());
私有列表属性列表=
新的SimpleListProperty(FXCollections.observableArrayList());
要从数据绑定和ListChangeListener
等属性的好处中获益,我必须向外部世界提供该属性。但是,也提供了对列表中所有方法的访问。(使用ReadOnlyListProperty没有任何效果,因为列表实例本身永远不会更改。)如何实现所有目标:
- 私有财产
- ListChangeListener可以从外部添加
- 可用于从外部绑定依赖项(创建方法形成类绑定)
- 不修改属性或列表实例本身
- 仅通过我自己的方法从外部修改列表内容
- 未测试,但请尝试:
private ListProperty<Object> list = new SimpleListProperty<>(FXCollections.observableArrayList());
private ReadOnlyListWrapper<Object> publicList = new ReadOnlyListWrapper<>();
那么您的访问器方法是
public ReadOnlyListProperty<Object> getList() {
return publicList.getReadOnlyProperty();
}
公共ReadOnlyListProperty getList(){
返回publicList.getReadOnlyProperty();
}
太好了,我已经测试过了,它似乎实现了所有目标!但是,您的bind方法缺少括号,FXCollections中的方法称为unmodifiableObservableList()。如果这解决了您的需求,请记住将其标记为解决方案。@Arceus感谢您指出错误(您可以猜到我只是直接键入了它):现在已修复。
public ReadOnlyListProperty<Object> getList() {
return publicList.getReadOnlyProperty();
}