JTextField BeansBinding

时间:2011-09-21 15:18:57

标签: swing desktop-application beans-binding

我有两个名为“qty”和“amount”的JtextField。当用户键入qty时,该值在某些计算下消失,并将最后一个值设置为amount textfield。我已将这两个文本域绑定到beansbinding类的属性。当用户键入qty时,调用负责该textfield的属性,然后我调用了qty的firepropertychange以及amount的firepropertychange来根据qty更新amount的值。这很有效。当使用退格按钮删除qty的textfield的值时,qty的值也会改变。但是当qty文本字段为空时,文本字段的数量仍保留其最后一个值(假设qty的数字为'22'且数量为textfield显示'44',当按下退格键时,数字为'2',数量的显示值为'4',但当数量中的最后一个值'2'被删除时,文本字段的数量显示为'4'。我想要文本字段的数量应显示为零。

对此有任何解决方案吗?

1 个答案:

答案 0 :(得分:1)

刚刚检查了默认转换器:它们不处理null / empty,你必须实现一个可以执行的操作并将其设置为绑定。有点像,看看差异取消转换器设置:

@SuppressWarnings({ "rawtypes", "unchecked" })
private void bind() {
    BindingGroup context = new BindingGroup();
    AutoBinding firstBinding = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE,
          // this is some int property
            this, BeanProperty.create("attempts"), 
            fields[0], BeanProperty.create("text"));
    context.addBinding(firstBinding);
    // firstBinding.setConverter(INT_TO_STRING_CONVERTER); 
    context.bind();
}

static final Converter<Integer, String> INT_TO_STRING_CONVERTER = new Converter<Integer, String>() {
    @Override
    public String convertForward(Integer value) {
        return Integer.toString(value);
    }

    @Override
    public Integer convertReverse(String value) {
        if (value == null || value.trim().length() == 0) return 0;
        return Integer.parseInt((String) value);
    }
};