gpt4 book ai didi

java - 为什么在 JavaFX ReadOnlyXPropety 中实现 ObservableValue 接口(interface)

转载 作者:行者123 更新时间:2023-11-29 08:26:08 26 4
gpt4 key购买 nike

我试图了解 JavaFX 属性 API,并注意到 ReadOnlyBooleanProperty、ReadOnlyStringProperty 和其他 ReadOnlyXPropety 类实现了 ObservableValue 接口(interface)。为什么我们需要更改只读属性的监听器?或者我不明白什么...

最佳答案

只读属性并不一定意味着该属性的值永远不会改变,它只是意味着它不能外部改变。

这方面的一个例子是 Worker接口(interface)及其抽象实现,例如Task . Worker 具有各种只读属性,包括:titlemessageprogressvalue 等。这些属性旨在向 UI 传达有关 Task 进度的信息。考虑到这一点,允许从外部源修改这些属性是没有意义的。但它仍然必须提供一种从后台任务修改这些属性的方法。在 Task 中,这是通过 protected updateMessageupdateProgress 和其他方法完成的。

在内部,这是通过使用 ReadOnlyXXXWrapper 类来完成的。这些实现扩展了它们相应的 SimpleXXXProperty 类,但公开了一个真正只读的专用 ReadOnlyXXXProperty。 “真的”,我的意思是它没有实现 WritableValue .这看起来像:

public class SomeClass {

private final ReadOnlyStringWrapper message = new ReadOnlyStringWrapper(this, "message");

private void setMessage(String message) {
this.message.set(message);
}

public final String getMessage() {
return message.get();
}

public final ReadOnlyStringProperty messageProperty() {
return message.getReadOnlyProperty();
}

}

请注意,setter 只允许类本身更改属性。对于世界其他地方,该属性是完全只读的。

关于java - 为什么在 JavaFX ReadOnlyXPropety 中实现 ObservableValue 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52893276/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com