Swing 有类似 vaadin 的LAZY
值变化模式吗?
就像“更新每次更改但经过短暂延迟并在事件完成之前值再次更改时取消事件”?
我们有一个float
-type 文本字段,我们绑定到一个属性,比如
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。)