Используйте классы в пакете 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 для свойств. Тем не менее, есть способы настроить, какие методы использовать для получения / установки.
Свойство адаптера будет получать значение из базового объекта и, если оно доступно для записи, также записывать в базовый объект при обновлении. Он также может наблюдать базовый объект на предмет изменений, если он поддерживает PropertyChangeListener
s. Обратите внимание, что эта функциональность реализована с использованием отражения; если вы используете модули, вам нужно добавить соответствующие директивы exports
/ opens
к вашему module-info
(подробности см. в javadoc, например, JavaBeanStringProperty
).