Java 插入分组字符时,格式化JTextField输入中的光标位置不正确
我基于Java 插入分组字符时,格式化JTextField输入中的光标位置不正确,java,swing,Java,Swing,我基于JFormattedTextField编写了一个简单的类,该类应该只允许数字输入(包括浮点数)。 我正在使用DecimalFormatter来实现输入验证,因为根据我所做的研究,这显然是Swing中进行验证的必经之路。 虽然该类确实按照预期正确限制输入,但每当用户键入将导致添加分组分隔符的数字时(例如从123到1234,光标将错误地向左移动一个位置(例如:1,23 | 4,而它应该是1234).这使得用户输入数字非常困难 添加分组分隔符时,如何使光标保持在正确的位置 最小代码示例: pub
JFormattedTextField
编写了一个简单的类,该类应该只允许数字输入(包括浮点数)。
我正在使用DecimalFormatter来实现输入验证,因为根据我所做的研究,这显然是Swing中进行验证的必经之路。
虽然该类确实按照预期正确限制输入,但每当用户键入将导致添加分组分隔符的数字时(例如从123
到1234
,光标将错误地向左移动一个位置(例如:1,23 | 4
,而它应该是1234
).这使得用户输入数字非常困难
添加分组分隔符时,如何使光标保持在正确的位置
最小代码示例:
public class JFloatTextField extends JFormattedTextField {
public JFloatTextField() {
this.setFormatterFactory(new AbstractFormatterFactory() {
@Override
public AbstractFormatter getFormatter(JFormattedTextField tf) {
Locale locale = Locale.getDefault();
DecimalFormatSymbols dfs = new DecimalFormatSymbols(locale);
DecimalFormat format = (DecimalFormat) DecimalFormat.getNumberInstance(locale);
format.setDecimalFormatSymbols(dfs);
format.setGroupingUsed(true);
format.setMinimumFractionDigits(2);
format.setMaximumFractionDigits(2);
format.setRoundingMode(RoundingMode.DOWN);
InternationalFormatter formatter = new InternationalFormatter(format);
formatter.setAllowsInvalid(false);
formatter.setMinimum(0.0);
formatter.setMaximum(Double.MAX_VALUE);
return formatter;
}
});
}
}
非常感谢您的帮助