我试图限制在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);
^
代码出了什么问题?
答案 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上的其他答案都没有我给他们的答案那么短,所以我想我会发帖讨论:)。干杯!