java如何在Swing中定义格式化文本字段,以便在键入时应用格式限制?
我需要在JFrame上有这样一个数字文本字段
- 将输入限制为小数点后两位数的数字 点
- 列出每三位数字分隔的数字,即1 234 567,89. 李>
- 数字立即以正确的格式显示 打字时
我尝试使用JFormattedTextField:
NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(2);
NumberFormatter numFormater = new NumberFormatter(nf);
field1 = new javax.swing.JFormattedTextField(numFormater);
但是,格式限制仅在焦点离开组件时适用,这是一个问题。我希望用户能够在字段中只键入数字和delimeter,并在字段中输入每个三维数字后放置一个空格delimeter
我可以在C#中通过指定字段的属性来实现这一点。在Swing中,什么是干净的方法? 多谢各位
# 1 楼答案
在字段中添加一个KeyListener并在键入键时重新格式化如何
# 2 楼答案
其中一种方法是使用
InternationalFormatter
,这是Number or DecimalFormatter
JFormattedTextField
中的每个限制对用户输入都有副作用,例如Caret
、Selection
等。适当的方法可以是使用组合
DocumentFilter
加上DocumentListener
加上JFormattedTextField
加上普通Number or DecimalFormatter
,没有任何限制,所有的解决方法都将在DocumentFilter
(指定用于Document
内的更改)和DocumentListener
(文档外)例如
InternationalFormatter
例如JSpinner (editor is JFormattedTextField) with very simple DocumentFilter