Java bean绑定:适配器?

时间:2010-04-14 16:46:05

标签: java swing data-binding

这是一个非常简单的课程:

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 

字段namefavoriteNumber很简单,但我对如何显示父名称感到困惑。看起来BeanAdapter只允许我绑定直接存在于Bean1中的属性。但这是模块化程度很差,每次我想绑定到bean的新方面时,它都会强制我添加getter / setter函数。

我想要做的是编写一个知道如何访问bean的帮助器类,并且很困惑如何使它与Bean1和BeanAdapter一起正常工作。

如果这个问题不是很明确,我很抱歉,我不知道词汇,对绑定的概念有点模糊。

1 个答案:

答案 0 :(得分:1)

这里的问题是绑定在两个方面都有效:从模型 ui ,从 ui 模型

在您的情况下,您如何处理第一次在绑定到 parent.name 的文本字段中输入信息的人?你会动态创建一个父母吗?你会给出错误吗?

如果您知道在这种情况下该怎么做(例如创建具有该名称的父母),您可以使用com.jgoodies.binding.value.AbstractConverterBean1转换为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")));