Java Can';我想不出是什么';我的文档过滤器有问题吗
我试着将其他人制作的定制的普通文档整合到一个我需要的文档中,但由于我不知道普通文档的机制,我失败了,它也不起作用。我需要的东西,将确保我的textfield只允许2个字母,所以任何一个a-zA-Z出现只有两次。我先试了一下:Java Can';我想不出是什么';我的文档过滤器有问题吗,java,regex,swing,user-interface,documentfilter,Java,Regex,Swing,User Interface,Documentfilter,我试着将其他人制作的定制的普通文档整合到一个我需要的文档中,但由于我不知道普通文档的机制,我失败了,它也不起作用。我需要的东西,将确保我的textfield只允许2个字母,所以任何一个a-zA-Z出现只有两次。我先试了一下: public class LetterDocument extends PlainDocument { private String text = ""; @Override public void insertString(int of
public class LetterDocument extends PlainDocument {
private String text = "";
@Override
public void insertString(int offset, String txt, AttributeSet a) {
try {
text = getText(0, getLength());
if ((text + txt).matches("^[a-zA-Z]{2}$")) {
super.insertString(offset, txt, a);
}
} catch (Exception ex) {
Logger.getLogger(LetterDocument.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
这甚至不允许我输入任何东西。然后我尝试了这个,我试着从另外两个线程组合起来,其中一个线程只允许输入字母,另一个线程限制字符:
public class LetterDocument extends PlainDocument {
private int limit;
private String text = "";
LetterDocument(int limit) {
super();
this.limit = limit;
}
@Override
public void insertString(int offset, String txt, AttributeSet a)
throws BadLocationException {
if (txt == null)
return;
try {
text = getText(0, getLength());
if (((text + txt).matches("[a-zA-Z]"))
&& (txt.length()) <= limit) {
super.insertString(offset, txt, a);
}
} catch (Exception ex) {
Logger.getLogger(LetterDocument.class.getName()).log(Level.SEVERE,
null, ex);
}
}
}
公共类LetterDocument扩展了PlainDocument{
私有整数限制;
私有字符串text=“”;
信笺(整数限制){
超级();
这个极限=极限;
}
@凌驾
公共void insertString(int偏移量、字符串txt、属性集a)
抛出BadLocationException{
如果(txt==null)
返回;
试一试{
text=getText(0,getLength());
if(((text+txt).matches(“[a-zA-Z]”)匹配)
&&(txt.length())不要使用自定义文档
请改为使用DocumentFilter
。请阅读上Swing教程中的部分,以了解限制可以在文档中输入的字符数的工作示例
然后添加一些额外的逻辑,确保只添加字母
或者更简单的选择是使用带有字符掩码的JFormattedTextField。请再次参阅上的教程。我对我的电话号码和邮政编码文本字段使用了掩码格式化程序,因为它们需要二维掩码(字符限制和掩码),我对地址、城市、名称使用了DocumentFilter,因为我只想将其限制为字符,不太担心大小。谢谢!而且,我没有收到任何错误,但是关于JTextField和JFormattedTextfield的所有内容都是一样的吗,比如方法,除了灵活性?我是在问,万一我必须通过和克修改。