我想让JTextField具有最大字符数,我一直在尝试这段代码,我想做的是,如果用户输入的字符数超过13个,则应该删除最后输入的字符,我也尝试使用Unicode字符(通过替换\ b到\ u0008),但给出的结果相同,这是我的代码:
if(EditTxtFName.getText().length() > 10)
{
EditTxtFName.setBackground(Color.red);
EditTxtFName.setText(EditTxtFName.getText() + "\b");
}
else
{
EditTxtFName.setBackground(Color.white);
}
所发生的结果是,不是删除最后一个字符,而是增加了空格并继续。
提前致谢..
最佳答案
使用DocumentFilter
,它旨在允许您在将内容添加到文本组件的基础Document
中之前对其进行过滤...
有关更多详细信息,请参见Implementing a Document Filter
例如...
import java.awt.*;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
public class SizeFilter extends DocumentFilter {
private int maxCharacters;
public SizeFilter(int maxChars) {
maxCharacters = maxChars;
}
public void insertString(FilterBypass fb, int offs, String str, AttributeSet a)
throws BadLocationException {
if ((fb.getDocument().getLength() + str.length()) <= maxCharacters)
super.insertString(fb, offs, str, a);
else
Toolkit.getDefaultToolkit().beep();
}
public void replace(FilterBypass fb, int offs, int length, String str, AttributeSet a)
throws BadLocationException {
if ((fb.getDocument().getLength() + str.length()
- length) <= maxCharacters)
super.replace(fb, offs, length, str, a);
else
Toolkit.getDefaultToolkit().beep();
}
}
可以使用类似...
((AbstractDocument) EditTxtFName.getDocument()).setDocumentFilter(new SizeFilter(13));
DocumentFilter Examples中的示例