gpt4 book ai didi

java - 装饰现有类以支持 javafx 属性

转载 作者:行者123 更新时间:2023-12-01 19:46:27 25 4
gpt4 key购买 nike

我有一个现有的类,我想保持对 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;
}
}

最佳答案

使用 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 使用的方法。

适配器属性将从底层对象获取值,如果可写,则在更新时也会写入底层对象。如果它支持PropertyChangeListener,它还可以观察底层对象的变化。请注意,此功能是使用反射实现的;如果您使用模块,则需要将适当的 exports/opens 指令添加到您的 module-info (请参阅各种属性的 javadoc,例如 JavaBeanStringProperty ,了解详情)。

关于java - 装饰现有类以支持 javafx 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53106064/

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