0

「qty」と「amount」という2つのJtextFieldがあります。ユーザーがqtyと入力すると、値は何らかの計算の下に置かれ、最後の値をamountテキストフィールドに設定します。これらの2つのテキストフィールドをbeansbindingクラスのプロパティにバインドしました。ユーザーがqtyと入力すると、そのテキストフィールドを担当するプロパティが呼び出され、次に、数量のfirepropertychangeと金額のfirepropertychangeを呼び出して、数量に応じて金額の値を更新します。これはうまく機能します。また、qtyのテキストフィールドの値がバックスペースボタンで削除されている場合、qtyの値も変更されます。ただし、qtyテキストフィールドが空の場合、量のテキストフィールドは最後の値のままになります(たとえば、qtyの数値は「22」で量はテキストフィールドです。は「44」を示し、バックスペースを押すと数字は「2」になります

これに対する解決策はありますか?

4

1 に答える 1

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);
    }
};
于 2011-09-21T16:58:07.777 に答える