JTextField BeansBinding
У меня есть 2 JtextFields, называемые "кол-во" и "сумма". Когда пользователь вводит в qty, значение проходит некоторый расчет и устанавливает последнее значение в текстовое поле суммы. Я связал эти 2 текстовых поля со свойствами класса привязки бобов. когда пользователь вводит qty, вызывается свойство, отвечающее за это текстовое поле, а затем я вызываю firepropertychange qty, а также firepropertychange суммы, чтобы обновить значение количества в соответствии с количеством. Это работает хорошо. Также, когда значение текстового поля qty удаляется с помощью кнопки возврата, значение qty также изменяется. Но когда текстовое поле qty пусто, текстовое поле суммы остается с его последним значением (скажем, у qty есть число '22' и текстовое поле количества показывает '44', и когда нажата клавиша Backspace, число равно '2, а значение показа суммы равно' 4 ', но когда также удаляется последнее значение' 2 'в qty, текстовое поле количества отображает'4'). Я хочу что текстовое поле количества должно показывать ноль.
Любое решение для этого, пожалуйста?
1 ответ
Только что проверил конвертеры по умолчанию: они не обрабатывают ноль / пусто, вы должны реализовать тот, который может это сделать, и установить его в привязку. Что-то вроде, чтобы увидеть разницу раскомментируйте настройку конвертера:
@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);
}
};