为什么JFormattedTextField是邪恶的?

在这个问题中有没有办法只接受JTextField中的数值? 其中一个答案表明JFormattedTextField存在问题。

我还没有使用它,但有人可以扩展(或不同意)这个课程的问题吗?

由于可用性差, JFormattedTextField很邪恶。 例如,如果文本字段只能接受整数值,则JFormattedTextField将允许任何旧垃圾,然后在焦点丢失时进行投诉。 更糟糕的是,当焦点丢失时,它具有一系列可配置的行为(一个明显的迹象表明它们都不是正确的选择)。

它还具有“k3wl”格式器选择。 它似乎与文档的交互性很差(它试图安装DocumentFilter ,但这不是Document接口的一部分)。

我承认JFormattedTextField不是最容易使用的类,是的它确实有问题,但是像大多数组件一样,它在某些方面做得很合理,在其他方面做得不好。

事实上它允许您在使用MaskFormatter时键入数据时编辑Integer值。 所以对于简单的任务,它可能是有效的。

编辑数据是一项复杂的任务。 有时您需要在输入数据时编辑数据(在检查Integer值的情况下)。 有时您需要在输入数据后编辑数据(在validation日期的情况下)。 当然,您需要决定如何处理无效数据。

在执行非平凡任务时,可以有一定数量的参数配置。 它们可能并不总是以您希望的方式或您期望的方式工作,因此您需要进行实验以找出何时可以/应该使用此组件。

我现在正在努力与JFormattetTextField合作。 我正在尝试使用NumberFormat.getPercentInstance()来格式化我的百分比值。

最糟糕的是.getValue()不会返回与用户看到的值相同的值。 例如,如果我在格式化文本字段中键入25,5% ,则将其.getValue()26% ,但.getValue()返回0.255 。 那是邪恶的。