将退格添加到Documentfilter

时间:2013-12-02 08:52:25

标签: java swing jtextfield documentlistener documentfilter

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

编辑:谢谢你的回答。我已将该功能添加到“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);
    }
}

1 个答案:

答案 0 :(得分:1)

您取消此处的删除

public void remove(DocumentFilter.FilterBypass fb, int offset, int length) throws BadLocationException 
        {  
            fb.insertString(offset, "", null);
        }