我正在使用Java swing程序。我想在我的JPanel中插入一个JTextFieldFormat,其字符数限制并转换为UPPER文本中的所有文本。 所以我构建了这段代码:
textCodiceFiscale = new JTextField();
textCodiceFiscale.setDocument(new PersonalizzaJtextField(numberCharacter));
DocumentFilter filter = new UppercaseDocumentFilter();
((AbstractDocument) textCodiceFiscale.getDocument()).setDocumentFilter(filter);
这是UppercaseDocumentFilter类:
class UppercaseDocumentFilter extends DocumentFilter {
public void insertString(DocumentFilter.FilterBypass fb, int offset,
String text, AttributeSet attr) throws BadLocationException {
fb.insertString(offset, text.toUpperCase(), attr);
}
public void replace(DocumentFilter.FilterBypass fb, int offset, int length,
String text, AttributeSet attrs) throws BadLocationException {
fb.replace(offset, length, text.toUpperCase(), attrs);
}
}
这是PersonalizzaJTextField类:
public class PersonalizzaJtextField extends PlainDocument {
//private StringBuffer cache = new StringBuffer();
private int lunghezzaMax;
public PersonalizzaJtextField(int lunghezzaMax){
super();
this.lunghezzaMax = lunghezzaMax;
}
public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException{
if (str == null)
return;
if ((getLength() + str.length()) <= lunghezzaMax) {
super.insertString(offset, str, attr);
}
}
}
现在问题是两个:
1)使用此代码,我只能在我的JTextField中插入UPPER字符,但我在第二行限制字符数,不起作用。
2)我想为这个JTextField创建一个模板,我必须在这个模式下插入数字或文本:
6个字符2个数字1个字符2个数字1个字符3个数字1个字符。
可以这样做吗?
答案 0 :(得分:2)
我想为此JTextField创建一个模板,我必须在此模式下插入数字或文本:
使用JFormattedTextField。您可以使用MaskFormatter让JFormattedTextField为您进行编辑。使用适当的掩码,您可以指定数字或大写字符。
阅读How to Use Formatted Text Fields上Swing教程中的部分,了解更多信息和示例。
顺便说一下,格式化文本字段会自动使用MaskFormatter为您创建DocumentFilter,因此您需要一个自定义过滤器。
为教程添加书签。您还在上一个关于此主题的问题中获得了教程的链接。使用Swing基础知识教程。