JTextField仅限于某些字符的输入

时间:2011-10-05 08:00:02

标签: java swing validation jtextfield keyevent

我想创建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条件,但现在用户可以粘贴不适当的输入,即'('或'<',没有任何问题...... 我该怎么办?

2 个答案:

答案 0 :(得分:7)

或许更好的方法是使用DocumentFilterPattern

答案 1 :(得分:3)

尝试使用JFormattedTextField并使用

MaskFormatter mf = new MaskFormatter();
mf.setValidCharacters("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVXYWZZ0123456789+&@#/%?=~_-|!:,.;");
JFormattedTextField textField = new JFormattedTextField(mf);

编辑:对不起,这是错误的代码,这是工作的

相关问题