Swing JTextField BeansBinding

Swing JTextField BeansBinding,swing,desktop-application,beans-binding,Swing,Desktop Application,Beans Binding,我有两个jtext字段,分别称为“数量”和“金额”。当用户键入qty时,该值将进行某些计算,并将最后一个值设置为amount textfield。我已经将这两个文本字段绑定到beansbinding类的属性。当用户键入qty时,将调用负责该文本字段的属性,然后我调用了qty的firepropertychange以及amount的firepropertychange,以根据qty更新amount的值。这很好。当使用退格按钮删除qty的文本字段值时,qty的值也会更改。但当qty文本字段为空时,am

我有两个jtext字段,分别称为“数量”和“金额”。当用户键入qty时,该值将进行某些计算,并将最后一个值设置为amount textfield。我已经将这两个文本字段绑定到beansbinding类的属性。当用户键入qty时,将调用负责该文本字段的属性,然后我调用了qty的firepropertychange以及amount的firepropertychange,以根据qty更新amount的值。这很好。当使用退格按钮删除qty的文本字段值时,qty的值也会更改。但当qty文本字段为空时,amount文本字段保留其最后一个值(假设数量有一个数字'22',金额文本字段显示'44',当按backspace时,数字为'2',金额的显示值为'4',但当数量中的最后一个值'2'也被删除时,金额文本字段显示'4')。我希望金额文本字段显示为零


有什么解决方案吗?

只检查了默认转换器:它们不处理null/empty,您必须实现一个可以处理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);
    }
};
@SuppressWarnings({“rawtypes”,“unchecked”})
私有无效绑定(){
BindingGroup上下文=新建BindingGroup();
自动绑定firstBinding=Bindings.createAutoBinding(UpdateStrategy.READ\u WRITE,
//这是一些int属性
这是BeanProperty.create(“尝试”),
字段[0],BeanProperty.create(“文本”);
addBinding(firstBinding);
//setConverter(INT_到字符串_转换器);
context.bind();
}
静态最终转换器INT_到字符串_转换器=新转换器(){
@凌驾
公共字符串正向转换(整数值){
返回整数.toString(值);
}
@凌驾
公共整数反转(字符串值){
if(value==null | | value.trim().length()==0)返回0;
返回整数.parseInt((字符串)值);
}
};

听起来转换字符串-->数字无法处理空/空输入(大多数格式化程序无法处理空/空输入,您必须告诉他们或您的转换器接受0)我对beansbinding仍然是新手。您能让我知道使用示例转换器类如何做到这一点吗?我想的是,当JTextField中没有任何字符时(当前面有一些字符时)JtextField的值是“不为null或空。这是我的想法,不知道确切的原因。好吧”,“是空字符串:-)将null和空字符串都映射为零,并感到高兴…感谢您的代码。我在我的应用程序中使用了它。它工作得很好。非常感谢:)我在转换器方面也遇到了另一个问题。我也可以用你的想法解决这个问题。非常高兴:)