这是一个非常简单的课程:
static public class Bean1
{
final private String name;
final private Bean1 parent;
private int favoriteNumber;
public String getName() { return this.name; }
public Bean getParent() { return this.parent; }
public int getFavoriteNumber() { return this.favoriteNumber; }
public void setFavoriteNumber(int i) { this.favoriteNumber = i; }
}
我想要做的是将一些UI组件绑定到BeanAdapter<Bean1>
(请参阅com.jgoodies.binding.beans.BeanAdapter
),这样如果BeanAdapter指向Bean1 bean1
,那么我可以显示
bean1.name (blank if null)
bean1.parent.name (blank if null or if bean1.parent is null)
bean1.favoriteNumber
字段name
和favoriteNumber
很简单,但我对如何显示父名称感到困惑。看起来BeanAdapter只允许我绑定直接存在于Bean1中的属性。但这是模块化程度很差,每次我想绑定到bean的新方面时,它都会强制我添加getter / setter函数。
我想要做的是编写一个知道如何访问bean的帮助器类,并且很困惑如何使它与Bean1和BeanAdapter一起正常工作。
如果这个问题不是很明确,我很抱歉,我不知道词汇,对绑定的概念有点模糊。
答案 0 :(得分:1)
这里的问题是绑定在两个方面都有效:从模型到 ui ,从 ui 到模型。
在您的情况下,您如何处理第一次在绑定到 parent.name 的文本字段中输入信息的人?你会动态创建一个父母吗?你会给出错误吗?
如果您知道在这种情况下该怎么做(例如创建具有该名称的父母),您可以使用com.jgoodies.binding.value.AbstractConverter
将Bean1
转换为String
:
public class ParentNameConverter extends AbstractConverter {
/**
* Converts a value from the subject to the type or format used
* by this converter.
*
* @param subjectValue the subject's value
* @return the converted value in the type or format used by this converter
*/
public Object convertFromSubject(Object subjectValue) { ... }
/**
* Sets a new value on the subject, after converting to appropriate type
* or format
*
* @param newValue the ui component's value
*/
public void setValue(Object newValue) { ... }
}
您可以像使用普通的ValueModel一样使用此转换器:
Bindings.bind(uifield,"value",
new ParentNameConverter(beanAdapter.getValueModel("parent")));