您可能想测试一下(我还没有测试过),但是基本思路应该可以帮助您入门。
至于设置的最小长度,你可能想使用
InputVerifier,以及
class MyIntFilter extends documentFilter { private int maxLength = 0; public void setMaxLength(int maxLength) { this.maxLength = maxLength; } public int getMaxLength() { return maxLength; } public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException { document doc = fb.getdocument(); StringBuilder sb = new StringBuilder(); sb.append(doc.getText(0, doc.getLength())); sb.insert(offset, string); if (maxLength > 0 && doc.getLength() + string.length() <= maxLength) { if (test(sb.toString())) { super.insertString(fb, offset, string, attr); } else { // warn the user and don't allow the insert } } } private boolean test(String text) { try { Integer.parseInt(text); return true; } catch (NumberFormatException e) { return false; } } @Override public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { document doc = fb.getdocument(); StringBuilder sb = new StringBuilder(2); sb.append(doc.getText(0, doc.getLength())); sb.replace(offset, offset + length, text); if (test(sb.toString())) { if (sb.length() > maxLength) { length = sb.length() - maxLength; if (length > 0) { text = text.substring(0, length); super.replace(fb, offset, length, text, attrs); } } } else { // warn the user and don't allow the insert } } @Override public void remove(FilterBypass fb, int offset, int length) throws BadLocationException { document doc = fb.getdocument(); StringBuilder sb = new StringBuilder(2); sb.append(doc.getText(0, doc.getLength())); //sb.append(doc.getText(0, 2)); sb.delete(offset, offset + length); if (test(sb.toString())) { super.remove(fb, offset, length); } else { // warn the user and don't allow the insert } }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)