Есть ли у Swing что-то похожее на режим изменения значения vaadin LAZY
?
Как в «обновлять каждое изменение, но после небольшой задержки и отменять событие, когда значение снова изменяется до завершения события»?
У нас есть текстовое поле типа float
, которое мы привязываем к свойству типа
binder.bindProperty(MY_FOO).converted(floatToString()).to(view.myFoo, ON_KEY_TYPED);
, где binder
представляет собой PresentationModelBinder
и
public static BindingConverter<Float, String> floatToString() {
return BindingConverters.<Float, String>fromModelAs(BindingConverters::toString).andFromViewAs(BindingConverters::parseFloat);
}
static <T> String toString(T anyValue) {
return (anyValue == null) ? null : anyValue.toString();
}
static <T> String toString(Float floatValue) {
return (floatValue == null) ? null : String.format("%.2f", floatValue);
}
Допустим, вы хотите ввести 12
- вы вводите
1
- Swing немедленно заменяет его на
1.00
и устанавливает курсор обратно на начало поля
- вы вводите
2
- упс, вы установили
21
Но становится еще хуже ...
Допустим, вы хотите написать 1.2
- вы вводите
1
- Swing немедленно заменяет это значение на
1.00
и устанавливает курсор обратно на начало поля
- вы вводите
.
- десятичные дроби (в этом приложении) определены, чтобы начинаться с цифр, точка не является числом, поэтому свинг стирает неверный ввод
- вы вводите
2
- упс, вы установили
2
Что плохо для пользователя, а не то, что я хочу.
Глядя на com.jgoodies.binding.binder.ValueModelBindingBuilder
, я вижу только два варианта: ON_FOCUS_LOST
- который не соответствует тому, что мы хотим - и ON_KEY_TYPED
- который очень четко ТАКЖЕ не соответствует тому, что мы хотим.
Есть ли что-то (в Swing), которое обеспечило бы нам необходимую функциональность или мы должны реализовать свою собственную?
(И прежде чем вы спросите, ДА, мы собираемся избавиться от Swing через несколько месяцев.)