JavaFX自定义DoubleTextField绑定DoubleProperty时单向绑定失效问题
问题根因
你自定义的DoubleTextField中设置了TextFormatter<Double>,该组件会接管TextField的文本内容转换、校验逻辑,双向绑定时JavaFX会自动适配TextFormatter的转换逻辑,所以可以正常运行;但直接单向绑定textProperty会和TextFormatter的内置同步逻辑冲突,导致绑定更新被拦截。另外你直接调用asString("%f")生成的字符串会默认携带6位小数,虽然符合你写的正则校验规则,但仍会和TextFormatter已有的DoubleStringConverter转换逻辑产生冲突。
解决方案
方案1:绑定TextFormatter的valueProperty(推荐)
直接绑定TextFormatter的valueProperty,利用其内置的转换器完成自动转换,不需要手动处理字符串格式:
// 替换你原来的单向绑定代码 dtfPrice.getTextFormatter().valueProperty().bind(model.getDpActualPrice());
这种方式会自动走你定义的正则校验逻辑,完全适配你自定义的DoubleTextField组件。
方案2:移除TextFormatter后直接绑定textProperty
如果你不需要输入校验,也可以去掉DoubleTextField构造方法中设置TextFormatter的逻辑,原来的单向绑定写法就能正常生效。
内容的提问来源于stack exchange,提问作者drakib
相关产品推荐
相关产品推荐

