Mig*_*ome 0 java swing maxlength jtextfield documentfilter
有人知道为什么在JtextField中,当我设置setDocument()属性-class PlainDocument-当我执行程序时,它向我显示字段ok,但只有我可以输入N-1个字符,当我将maxlength prop设置为N字符长度.
// Block 1
txtPais.setDocument(new MaxLengthTextCntry());
Run Code Online (Sandbox Code Playgroud)
我有另一个内部设置最大长度的类
// Block 2
public class MaxLengthTextCntry extends MaxLengthGeneric{
public MaxLengthTextCntry(
{
super(2);
}
}
Run Code Online (Sandbox Code Playgroud)
最后是MaxLengthGeneric类
// Block 3
public abstract class MaxLengthGeneric extends PlainDocument {
private int maxChars;
public MaxLengthGeneric(int limit) {
super();
this.maxChars = limit;
}
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
if (str != null && (getLength() + str.length() < maxChars)) {
super.insertString(offs, str, a);
}
}
}
Run Code Online (Sandbox Code Playgroud)
解
维护块2,我用块1代替了块1
((AbstractDocument) txtRucnumero.getDocument()).setDocumentFilter(new MaxLengthTextRuc());
Run Code Online (Sandbox Code Playgroud)
Block 3改变了DocumentFilter的依赖性.不要忘记实现父方法insertString()和replace()!!
public abstract class MaxLengthGeneric extends DocumentFilter {
...
@Override
public void insertString(FilterBypass fb, int offs, String str,
AttributeSet a) throws BadLocationException {
if ((fb.getDocument().getLength() + str.length()) <= maxChars)
super.insertString(fb, offs, str, a);
else
Toolkit.getDefaultToolkit().beep();
}
@Override
public void replace(FilterBypass fb, int offs, int length, String str,
AttributeSet a) throws BadLocationException {
if ((fb.getDocument().getLength() + str.length() - length) <= maxChars)
super.replace(fb, offs, length, str, a);
else
Toolkit.getDefaultToolkit().beep();
}
}
Run Code Online (Sandbox Code Playgroud)
或者解决方案2(或者可能是为Jnewbies生活调试的重要性:<replace with <=)
** if (str != null && (getLength() + str.length() <= maxChars)) {**
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2186 次 |
| 最近记录: |