我有一个程序可以从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);
}
}
答案 0 :(得分:1)
您取消此处的删除
public void remove(DocumentFilter.FilterBypass fb, int offset, int length) throws BadLocationException
{
fb.insertString(offset, "", null);
}