JavaFX ReadOnlyListProperty不是只读的?

 2023-02-17    424  

问题描述

此代码会引发一个无pusportedoperationException,因为我希望它仅阅读.

ListProperty<String> lp = new SimpleListProperty<String>();
ReadOnlyListWrapper<String> rolw = new ReadOnlyListWrapper<String>(lp);
ReadOnlyListProperty<String> rolp = rolw.getReadOnlyProperty();
rolp.add("element");

但是,此代码没有.

JavaFX ReadOnlyListProperty不是只读的?

ObservableList<String> ol = FXCollections.observableArrayList();
ReadOnlyListWrapper<String> rolw = new ReadOnlyListWrapper<String>(ol);
ReadOnlyListProperty<String> rolp = rolw.getReadOnlyProperty();
rolp.add("element");

这是一个错误,还是我只是不了解某事?

推荐答案

原始期望是错误的 – 对于提供的示例.无层压的exception发生是出于不同的原因而发生的,而不是因为”写入”的”只读”列表.仍然可以拥有”仅阅读”列表.我希望下面的答案有助于澄清.

需要以两部分考虑答案.一:listProperty异常和两个:仅读取列表.

1)listProperty示例失败,因为未分配列表.

这个简化的示例也引发了异常.请注意,删除了任何”仅阅读”方面:

ListProperty<String> lp = new SimpleListProperty<>();
lp.add("element");

可以用:

纠正这一点

ObservableList ol = FXCollections.observableArrayList();
ListProperty<String> lp = new SimpleListProperty<>();
lp.setValue(ol);
lp.add("element");

如果我们以类似的方式更改原始示例,那么listProperty和observablistist示例都不会引发异常,这不是OP想要或期望的.

2)第二部分询问为什么可以将元素添加到仅读取列表中.使用fxcollections.unmodifiabiableobservablelist创建仅读取列表将按预期投掷undubportedOperationException:

ObservableList<String> ol = FXCollections.observableArrayList();
ObservableList<String> uol = FXCollections.unmodifiableObservableList(ol);
uol.add("element");

但这没有回答以下问题,为什么readonlylistwrapper/属性这样做?

让我们先处理该物业. ListProperty启用更改 value ,即允许您将不同的列表分配给属性. ReadOnlyListProperty不允许这样做,即,一旦分配了列表,它仍然是该列表对象.列表的内容仍然可以更改.下面的示例对ReadOnlyListProperty没有意义:

ObservableList<String> ol1 = FXCollections.observableArrayList();
ObservableList<String> ol2 = FXCollections.observableArrayList();
ListProperty<String> lp = new SimpleListProperty<>(ol1);
lp.setValue(ol2);

因此,仅读取该属性,而不是列表.

最后 – readonlylistwrapper-正如API文档所述:”此类提供了一个方便的类来定义仅阅读属性.它创建了两个同步的属性.一个属性是纯属性的,可以将其传递给外部用户.另一个属性.另一个属性.另一个属性.属性是阅读和可写的,应仅在内部使用.”

以上所述是小编给大家介绍的JavaFX ReadOnlyListProperty不是只读的?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/34153.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。