java - 开发人员应该在 JavaFX 中实现自己的 XXXProperties 吗?

标签 java javafx

我正在阅读有关 javafx 属性的内容,但不明白为什么我们可以用来创建属性实例的非抽象类(例如 SimpleStringProperty)在它们的代码中有 Simple 字样名字。据我所知,实现中的简单 意味着某些东西的基本实现。

是否假设开发人员应该在 JavaFX 中实现必须扩展 XXXPropertyBase 的自己的 XXXProperty?

让我们以 SimpleStringProperty 为例。

 java.lang.Object
    javafx.beans.binding.StringExpression
        javafx.beans.property.ReadOnlyStringProperty
            javafx.beans.property.StringProperty
                javafx.beans.property.StringPropertyBase
                    javafx.beans.property.SimpleStringProperty 

我们是否应该开发自己的 OurStringProperty 来扩展 StringPropertyBase

同时在javadoc据说 javafx.beans.property.StringProperty 类提供了包装字符串值的属性的完整实现。那么为什么我们需要这个SimpleStringProperty呢?怎么解释呢?

最佳答案

下面是一个示例,说明如何使用 JavaFX 提供的实现将简单的基于对象的属性添加到您的类中(字符串和基本类型存在类似的类):

private final ObjectProperty<Foo> foo = new SimpleObjectProperty<>(this,
        "foo", null);

public final Foo getFoo() {
    return fooProperty().get();
}

public final void setFoo(Foo foo) {
    fooProperty().set(foo);
}

public ObjectProperty<Foo> fooProperty() {
    return foo;
}

下面是基于 JavaFX 提供的一些基类的只读属性实现示例:

public class MyClass {

    private final ReadOnlyBarProperty bar = new ReadOnlyBarProperty();

    public final Bar getBar() {
        return barProperty().get();
    }

    private void setBar(Bar bar) {
        this.bar.set(bar);
    }

    public ReadOnlyObjectProperty<Bar> barProperty() {
        return bar;
    }

    [...]

    private class ReadOnlyBarProperty extends ReadOnlyObjectPropertyBase<Bar> {

        private Bar bar = null;

        @Override
        public final Bar get() {
            return bar;
        }

        private void set(Bar newValue) {
            if (!Objects.equals(bar, newValue)) {
                bar = newValue;
                fireValueChangedEvent();
            }
        }

        @Override
        public Object getBean() {
            return MyClass.this;
        }

        @Override
        public String getName() {
            return "bar";
        }
    }
}

在极少数情况下,您希望提供自己的属性实现。例如。我写了一个 SimpleEventHandlerPropertyDrombler Commons .

我希望这些示例可以解决一些问题。

关于java - 开发人员应该在 JavaFX 中实现自己的 XXXProperties 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52898896/

相关文章:

javafx 程序中的 java.lang.reflect.InitationTargetException

javafx - 代码区右键获取字符索引

java - 来自服务器端 spring mvc 的 jquery 自动完成

java - 字符串到 GZIPOutputStream

java - JMenu 弹出窗口有时有效

JavaFX TableColumn 图形不隐藏

JavaFX 在带有动画的条形图中可视化算法

java - 从字符串中获取手机号码和密码

java - Maven、Proguard 和我不想要的 jar

java - 为什么 JavaFX TableView 不显示数据?