猿问

修饰现有类以支持 javafx 属性

我有一个现有的类,我想对 javafx 一无所知。是否有一种普遍接受的方式来装饰或调整它以支持 javafx 属性?


我想做类似以下的事情(这显然是错误的):


public class FooWrapper {

    /**

     * Decorates a Foo instance with javafx stuff

     */

    private final Foo foo;


    public FooWrapper(Foo toWrap) {

        this.foo = toWrap;

    }


    private final StringProperty name = new SimpleStringProperty();


    public final StringProperty nameProperty() {

        return this.foo.getName();//?????

    }


    public final String getName() {

        return this.nameProperty().get();

    }


    public final void setFirstName(final String name) {

        this.nameProperty().set(name);

    }


}


public class Foo {

    /**

     * Basic class I want to keep ignorant of javafx

     */


    private String name = "hello";


    public String getName() {

        return this.name;

    }


    public void setName(String name) {

        this.name = name;

    }

}


qq_花开花谢_0
浏览 109回答 1
1回答

忽然笑

使用javafx.beans.property.adapter包中的类。public class Foo {    private String name;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}public class FooAdapter {    private final JavaBeanStringProperty name;    public FooAdapter(Foo foo) {        try {            name = JavaBeanStringPropertyBuilder.create().bean(foo).name("name").build();        } catch (NoSuchMethodException ex) {            throw new RuntimeException(ex);        }    }    public final void setName(String name) {        this.name.set(name);    }    public final String getName() {        return name.get();    }    public final StringProperty nameProperty() {        return name;    }}上面创建的适配器属性要求底层对象遵循 Java Bean 属性约定。但是,有一些方法可以自定义用于 getter/setter 的方法。适配器属性将从底层对象获取值,如果可写,也会在更新时写入底层对象。如果支持PropertyChangeListeners,它还可以观察底层对象的变化。请注意,此功能是使用反射实现的;如果您正在使用模块,您需要将适当的exports/opens指令添加到您的module-info(JavaBeanStringProperty有关详细信息,请参阅各种属性的 javadoc,例如)。
随时随地看视频慕课网APP

相关分类

Java
我要回答