Java 将退格添加到Documentfilter
我有一个程序,可以从JTextField中删除所有非数字字符,并将其限制为5位。但是这个文档过滤器也删除了backspace函数,这意味着我不能编辑我所做的输入。如何在不删除过滤器的情况下再次添加退格 编辑:谢谢你的回答。我已经将该功能添加到“public void remove”中,现在我的删除再次生效。但我注意到它将我的文本输入向后存储。如果我写“12345”,然后使用我的(int-length-1),它会删除“1”,然后是“2”,依此类推。它为什么这样做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
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);
}
@user3048704fb.remove()
/super.remove()
而不是insert-`fb.insertString(offset,“,null);