为了账号安全,请及时绑定邮箱和手机立即绑定

修饰现有类以支持 javafx 属性

修饰现有类以支持 javafx 属性

qq_花开花谢_0 2021-12-22 20:26:51
我有一个现有的类,我想对 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;    }}
查看完整描述

1 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

使用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,例如)。


查看完整回答
反对 回复 2021-12-22
  • 1 回答
  • 0 关注
  • 108 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号