清除JFormattedTextField的内容不起作用?

use*_*473 3 java swing jformattedtextfield

  1. 我有一个JFormattedTextField只接受8位数字的数字,但是当我尝试用退格键清除文本字段时它不会删除数字的第一个字符(删除按钮的行为也一样),我必须预先找到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);
    
    Run Code Online (Sandbox Code Playgroud)

这有什么问题?

  1. 同时清除此文本字段releaseNoTextField.setText("")不起作用,还有另一种方法吗?

Mad*_*mer 6

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

这是一个限制,通过numberFormatter.setAllowsInvalid(false);它可以看到一个空白String("")不是一个有效的数值.如果使用,numberFormatter.setAllowsInvalid(true);您可以删除所有字符,但您也可以输入任何您喜欢的值.

在用户离开现场后,该字段将被验证.

如果你不关心格式化的值(12, 345, 678),那么你可以使用DocumentFilter一个简单JTextField的实现你需要的逻辑.有关更多详细信息,请参阅实现文档过滤器DocumentFilter示例.

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

你应该(总是)是使用setValueJFormattedTextField,你应该真正setValue(null)以清除场