清除JFormattedTextField的内容无法正常工作?

时间:2015-08-07 05:30:44

标签: java swing jformattedtextfield

  1. 我有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);
    
  2. 这里的问题是什么?

    1. 同时使用releaseNoTextField.setText("")清除此文本字段无效,是否有其他方法可以执行此操作?

2 个答案:

答案 0 :(得分:6)

  

我有一个JFormattedTextField只能接受8位数字,但是当我尝试用退格键清除文本字段时它不会删除第一个数字字符(删除按钮的行为也一样),我必须预先找到要删除的Esc键这个角色每一次。

这是numberFormatter.setAllowsInvalid(false);应用的限制,其中空白String"")不是有效的数值。如果您使用numberFormatter.setAllowsInvalid(true);,则可以删除所有字符,但您也可以输入任何您喜欢的值。

该字段将在用户离开该字段后进行验证。

如果您不关心格式化的值(12, 345, 678),那么您可以使用DocumentFilter应用于普通JTextField实现其中所需的逻辑。有关详细信息,请参阅Implementing a Document FilterDocumentFilter Examples

  

同样使用releaseNoTextField.setText(“”)清除此文本字段不起作用,还有另一种方法吗?

您应该(始终)将setValue用于JFormattedTextField,并且您应该setValue(null)清除该字段

答案 1 :(得分:-1)

releaseNoTextField.setFocusLostBehavior(javax.swing.JFormattedTextField.COMMIT);