如何在java swing中使用过滤器来处理文本字段?

时间:2012-08-09 19:41:12

标签: java swing jtextfield keylistener

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

  • atjqk23,...,{ {1}}

我不希望文本字段显示任何内容。

这就是我所拥有的,

9

3 个答案:

答案 0 :(得分:5)

您可以覆盖insertString类的方法Document。看一个例子:

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);

}

答案 1 :(得分:4)

  

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

这是DocumentFilter Pattern的工作,example

答案 2 :(得分:2)

使用JFormattedTextField课程。有关详细信息,请参阅How to Use Formatted Text Fields