JTextField BeansBinding - PullRequest
       9

JTextField BeansBinding

0 голосов
/ 21 сентября 2011

У меня есть 2 JtextFields с именами "qty" и "amount".Когда пользователь вводит в qty, значение проходит некоторый расчет и устанавливает последнее значение в текстовое поле суммы.Я связал эти 2 текстовых поля со свойствами класса привязки бобов.когда пользователь вводит qty, вызывается свойство, отвечающее за это текстовое поле, а затем я вызываю firepropertychange qty, а также firepropertychange суммы, чтобы обновить значение количества в соответствии с количеством.Это работает хорошо. Также, когда значение текстового поля qty удаляется с помощью кнопки возврата назад, значение qty также изменяется. Но когда текстовое поле qty пусто, текстовое поле суммы остается с его последним значением (скажем, у qty есть число '22' и текстовое поле количествапоказывает '44', и когда нажата клавиша Backspace, число равно 2, а значение показа суммы равно '4', но когда также удаляется последнее значение '2' в qty, текстовое поле количества показывает '4'). Я хочучто текстовое поле количества должно показывать ноль.

Любое решение для этого, пожалуйста?

1 Ответ

1 голос
/ 21 сентября 2011

только что проверил конвертеры по умолчанию: они не обрабатывают ноль / пусто, вы должны реализовать тот, который может это сделать, и установить для него привязку.Что-то вроде, чтобы увидеть разницу раскомментируйте настройку конвертера:

@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);
    }
};
...