Java 将退格添加到Documentfilter

Java 将退格添加到Documentfilter,java,swing,jtextfield,documentlistener,documentfilter,Java,Swing,Jtextfield,Documentlistener,Documentfilter,我有一个程序,可以从JTextField中删除所有非数字字符,并将其限制为5位。但是这个文档过滤器也删除了backspace函数,这意味着我不能编辑我所做的输入。如何在不删除过滤器的情况下再次添加退格 编辑:谢谢你的回答。我已经将该功能添加到“public void remove”中,现在我的删除再次生效。但我注意到它将我的文本输入向后存储。如果我写“12345”,然后使用我的(int-length-1),它会删除“1”,然后是“2”,依此类推。它为什么这样做 public class only

我有一个程序,可以从JTextField中删除所有非数字字符,并将其限制为5位。但是这个文档过滤器也删除了backspace函数,这意味着我不能编辑我所做的输入。如何在不删除过滤器的情况下再次添加退格

编辑:谢谢你的回答。我已经将该功能添加到“public void remove”中,现在我的删除再次生效。但我注意到它将我的文本输入向后存储。如果我写“12345”,然后使用我的(int-length-1),它会删除“1”,然后是“2”,依此类推。它为什么这样做

public class onlyNumericDocumentFilter extends DocumentFilter {

    @Override
    public void insertString(DocumentFilter.FilterBypass fb, int offset,
            String string, AttributeSet attr) throws BadLocationException {
        if (fb.getDocument().getLength() + string.length() > 5) {
            return;
        }
        fb.insertString(offset, string, attr);
    }

    @Override
    public void remove(DocumentFilter.FilterBypass fb, int offset, int length)
            throws BadLocationException {

      //edit: 
          fb.remove(length-1, 1);  


       // fb.insertString(offset, "", null);
    }

    @Override
    public void replace(DocumentFilter.FilterBypass fb, int offset, int length,
            String text, AttributeSet attr) throws BadLocationException {
        if (fb.getDocument().getLength() + text.length() > 5) {
            return;
        }
        fb.insertString(offset, text.replaceAll("\\D", ""), attr);
    }
}

您可以在此处抑制删除

public void remove(DocumentFilter.FilterBypass fb, int offset, int length) throws BadLocationException 
        {  
            fb.insertString(offset, "", null);
        }  
@user3048704
fb.remove()
/
super.remove()
而不是insert-`fb.insertString(offset,“,null);