如何在JavaSwing中使用文本字段过滤器?

如何在JavaSwing中使用文本字段过滤器?,java,swing,jtextfield,keylistener,Java,Swing,Jtextfield,Keylistener,我有一个JTextField。当用户输入a或j时,我希望文本字段中的文本为大写(例如输入“ab”,输出“ab”)。如果第一个字母不是下列字母之一 a,t,j,q,k,2,3,…,9 我不希望文本字段显示任何内容 这就是我所拥有的 public class Gui { JTextField tf; public Gui(){ tf = new JTextField(); tf.addKeyListener(new KeyListener(){

我有一个
JTextField
。当用户输入
a
j
时,我希望文本字段中的文本为大写(例如输入“ab”,输出“ab”)。如果第一个字母不是下列字母之一

  • a
    t
    j
    q
    k
    2
    3
    ,…,
    9
我不希望文本字段显示任何内容

这就是我所拥有的

public class Gui {
    JTextField tf;
    public Gui(){
        tf = new JTextField();
        tf.addKeyListener(new KeyListener(){
           public void keyTyped(KeyEvent e) {
           }
           /** Handle the key-pressed event from the text field. */
           public void keyPressed(KeyEvent e) {
           }
           /** Handle the key-released event from the text field. */
           public void keyReleased(KeyEvent e) {
           }
        });
    }
}
使用该类。有关详细信息,请参阅

如果第一个字母不是“a”/“a”或“t”/“t”或“j”/“j”或“q”/“q”或“k”/“k”,或任何“2”、“3”、“9”,我希望文本字段不显示任何内容


这是一个简单的作业,您可以覆盖
文档
类的
插入字符串
。请看一个例子:

JTextField tf;

public T() {
    tf = new JTextField();
    JFrame f = new JFrame();
    f.add(tf);
    f.pack();
    f.setVisible(true);

    PlainDocument d = new PlainDocument() {
        @Override
        public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
            String upStr = str.toUpperCase();
            if (getLength() == 0) {
                char c = upStr.charAt(0);
                if (c == 'A' || c == 'T' || c == 'J' || c == 'Q' || c == 'K' || (c >= '2' && c <= '9')) {
                    super.insertString(offs, upStr, a);
                }
            }

        }
    };
    tf.setDocument(d);

}
JTextField;
公共电话{
tf=新的JTextField();
JFrame f=新的JFrame();
f、 添加(tf);
f、 包装();
f、 setVisible(真);
PlainDocument d=新的PlainDocument(){
@凌驾
public void insertString(int offs、String str、AttributeSet a)引发BadLocationException{
字符串upStr=str.toUpperCase();
如果(getLength()==0){
字符c=上字符(0);

如果(c='A'| | c='T'| c='J'| c='Q'| c='K'|(c>='2'&&c),我不确定JFormattedTextField是否足以满足这些要求。。。。