无法设置限制JTextField中的字符数

时间:2010-12-23 08:22:34

标签: java swing jtextfield

我试图限制在JTextField中输入的字符数...为此我创建了一个这样的类:

    class JTextFieldLimiter extends PlainDocument  
    {  
        private int limit;  
        JTextFieldLimiter(int limit)  
        {  
            super();  
            this.limit= limit;  
        }  
        public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException {  
        if (str == null)  
          return;  

        if ((getLength() + str.length()) <= limit) {  
          super.insertString(offset, str,  attr);  
        }  
      }
   }

我认为这必须正常工作,但编译器显示错误,它说:

cannot find symbol: method insertString(int,java.lang.String,javax.print.attribute.Attributeset)
location:class javax.swing.text.PlainDocument  
 super.insertString(offset,str,(AttributeSet) attr);  
      ^

代码出了什么问题?

3 个答案:

答案 0 :(得分:2)

您使用的是错误的AttributeSet。检查你的进口。

应该是:

javax.swing.text.AttributeSet

javax.print.attribute.Attributeset

答案 1 :(得分:0)

不使用创建自定义文档,更好的解决方案是使用DocumentFilter。然后,这可以在JTextField或JTextArea或JTextPane上使用。阅读How to Write a Document Filter上的Swing教程中的部分,以获取一个工作示例。

答案 2 :(得分:0)

如果您只是想限制JTextField中的字符数,我会避免使用Document或DocumentFilter。您可以覆盖keyTyped()事件,如下例所示:

txtGuess = new JTextField();
txtGuess.addKeyListener(new KeyAdapter() {
    public void keyTyped(KeyEvent e) { 
        if (txtGuess.getText().length() >= 3 ) // limit textfield to 3 characters
            e.consume(); 
    }  
});

这会将猜测游戏文本字段中的字符数限制为3个字符,方法是重写keyTyped事件并检查文本字段是否已有3个字符 - 如果是,则表示&#34;消耗&#34 34;关键事件(e),以便它不会像平常一样得到处理。

我的一个学生问了这个问题,StackOverflow上的其他答案都没有我给他们的答案那么短,所以我想我会发帖讨论:)。干杯!