我有JFormattedTextField
只能接受8位数字,但是当我尝试用退格键清除文本字段时,它不会删除数字的第一个字符(删除按钮的行为也一样),I必须预先设定Esc键才能每次删除此字符。
NumberFormat intFormat = NumberFormat.getIntegerInstance();
intFormat.setGroupingUsed(false);
NumberFormatter numberFormatter = new NumberFormatter(intFormat);
numberFormatter.setValueClass(Integer.class);
numberFormatter.setAllowsInvalid(false);
numberFormatter.setMinimum(0);
numberFormatter.setMaximum(99999999);
releaseNoTextField = new JFormattedTextField(numberFormatter);
这里的问题是什么?
releaseNoTextField.setText("")
清除此文本字段无效,是否有其他方法可以执行此操作?答案 0 :(得分:6)
我有一个JFormattedTextField只能接受8位数字,但是当我尝试用退格键清除文本字段时它不会删除第一个数字字符(删除按钮的行为也一样),我必须预先找到要删除的Esc键这个角色每一次。
这是numberFormatter.setAllowsInvalid(false);
应用的限制,其中空白String
(""
)不是有效的数值。如果您使用numberFormatter.setAllowsInvalid(true);
,则可以删除所有字符,但您也可以输入任何您喜欢的值。
该字段将在用户离开该字段后进行验证。
如果您不关心格式化的值(12, 345, 678
),那么您可以使用DocumentFilter
应用于普通JTextField
实现其中所需的逻辑。有关详细信息,请参阅Implementing a Document Filter和DocumentFilter Examples。
同样使用releaseNoTextField.setText(“”)清除此文本字段不起作用,还有另一种方法吗?
您应该(始终)将setValue
用于JFormattedTextField
,并且您应该setValue(null)
清除该字段
答案 1 :(得分:-1)
releaseNoTextField.setFocusLostBehavior(javax.swing.JFormattedTextField.COMMIT);