java-如何一起使用MaskFormatter和DocumentFilter
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-如何一起使用MaskFormatter和DocumentFilter,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2673字,纯文字阅读大概需要4分钟。
内容图文
![java-如何一起使用MaskFormatter和DocumentFilter](/upload/InfoBanner/zyjiaocheng/660/91abbea8555243abbe2b58f01b636fb2.jpg)
我需要有一个JFormattedTextField,它仅允许输入##-### **,其中连字符始终出现在文本字段中,并且用*表示的最后2个字符可以是2个字母( az / AZ)或完全不显示.
我知道如何解决部分问题,但不确定如何将所有内容整合在一起.我知道使用##-### **的MaskFormatter将给我始终存在的连字符,但是我没有办法强制执行最后2个字符为字母或完全没有字符的规则.此外,MaskFormatter将用最后一个有效插入替换任何删除,这是不希望的.
我也知道我可以使用DocumentFilter通过使用正则表达式仅允许我想要的格式,类似于此功能,但具有不同的正则表达式:
public void insertString(FilterBypass fb, int offs, int length, String str, AttributeSet a)
throws BadLocationException {
String text = fb.getDocument().getText(0, fb.getDocument().getLength());
text += str;
if ((fb.getDocument().getLength() + str.length()
- length) <= maxCharacters && text.matches("^[0-9]+[.]?[0-9]{0,1}$")) {
super.replace(fb, offs, length, str, a);
} else {
Toolkit.getDefaultToolkit().beep();
}
}
我看到的使用此命令的问题是我将无法使连字符始终出现在文本字段中.
有人可以帮助我完成这两个所需功能之间的桥梁吗?
解决方法:
“there is no way for me to enforce the rule of the last 2 characters being either letters or numbers.”
抱歉,没有看到您使用的是MaskFormatter.如果您查看API docs,则会看到可能的字符格式图表
>#任何有效数字,使用Character.isDigit.
>’转义字符,用于转义任何特殊格式的字符.
> U任何字符(Character.isLetter).所有小写??字母都映射为大写.
> L任何字符(Character.isLetter).所有大写字母都映射为小写字母.
>任何字符或数字(Character.isLetter或Character.isDigit)
>?任何字符(Character.isLetter).
> *任何东西.
> H任何十六进制字符(0-9,a-f或A-F).
因此,您实际上可以只使用“ ##-#### UU”
使用InputVerifier编辑
import javax.swing.InputVerifier;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class TestMaskFormatter {
private static final String REGEX = "^\\d{2}\\-\\d{4}([A-Z]{2})??";
private static InputVerifier getInputVerifier() {
InputVerifier verifier = new InputVerifier() {
@Override
public boolean verify(JComponent input) {
JTextField field = (JTextField) input;
String text = field.getText();
return text.matches(REGEX) || text.isEmpty();
}
@Override
public boolean shouldYieldFocus(JComponent input) {
boolean valid = verify(input);
if (!valid) {
JOptionPane.showMessageDialog(null, "Must Match format: 00-0000AA");
JTextField field = (JTextField) input;
field.setText("");
}
return valid;
}
};
return verifier;
}
public static void main(String[] args) {
JTextField fieldWithVerifier = new JTextField(10);
fieldWithVerifier.setInputVerifier(getInputVerifier());
JTextField field1 = new JTextField(10);
JPanel panel = new JPanel();
panel.add(fieldWithVerifier);
panel.add(field1);
JOptionPane.showMessageDialog(null, panel);
}
}
内容总结
以上是互联网集市为您收集整理的java-如何一起使用MaskFormatter和DocumentFilter全部内容,希望文章能够帮你解决java-如何一起使用MaskFormatter和DocumentFilter所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。