我想创建JTextField,其输入字符仅限于某些内容 “?abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVXYWZZ0123456789 +功放; @#/%=〜-_- |:!;” 所以我试着重写
public class CustomJTextField extends JTextField {
String goodchars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVXYWZZ0123456789+&@#/%?=~_-|!:,.;";
//... my class body ...//
@Override
public void processKeyEvent(KeyEvent ev) {
if(c != '\b' && goodchars.indexOf(c) == -1 ) {
ev.consume();
return;
}
else
super.processKeyEvent(ev);}}
但它不是我想要的,因为用户不能再按ctrl-c ctrl -v ctrl-x ...所以我加入了
&& ev.getKeyCode() != 17 && ev.getKeyCode() !=67 && ev.getKeyCode() != 86 && ev.getKeyCode() !=0 &&
到if条件,但现在用户可以粘贴不适当的输入,即'('或'<',没有任何问题...... 我该怎么办?
答案 0 :(得分:7)
或许更好的方法是使用DocumentFilter与Pattern,
答案 1 :(得分:3)
尝试使用JFormattedTextField并使用
MaskFormatter mf = new MaskFormatter();
mf.setValidCharacters("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVXYWZZ0123456789+&@#/%?=~_-|!:,.;");
JFormattedTextField textField = new JFormattedTextField(mf);
编辑:对不起,这是错误的代码,这是工作的