0

我试图限制在 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);  
      ^

代码有什么问题?

4

3 回答 3

2

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

它应该是 :

javax.swing.text.AttributeSet

不是:

javax.print.attribute.Attributeset
于 2010-12-23T08:37:53.290 回答
0

除了创建自定义文档之外,更好的解决方案是使用 DocumentFilter。然后可以在 JTextField 或 JTextArea 或 JTextPane 上使用它。阅读 Swing 教程中有关如何编写文档过滤器的部分以获取工作示例。

于 2010-12-23T16:37:30.890 回答
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 个字符 - 如果是这样,您正在“消耗”键事件 (e) 以便它不会像往常一样得到处理。

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

于 2016-02-14T15:56:38.490 回答