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

标签 java javafx

我试图了解 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/

相关文章:

java - 如何使用处理程序 javafx 限制文本字段中的最大值

java - 如何在 JavaFX 中的另一个 Controller 中使用类似(面板、anchorpane)的组件

java - arraylength 中操作数堆栈上的错误类型

java - Java中如何解决这个 "non-static variable"问题?

java - TCP套接字超时配置

java - 使用 inputFileUpload 标签选择多个文件

JavaFX TitledPane 删除鼠标悬停

java - FX :id of JavaFX Alert OK Button? 是什么

java - 调整 Pane 中 SwingNode 的大小

java - 你如何在 Java 中编辑 MP4 ID3 标签?