java - 如何在 java swing 中为文本字段使用过滤器?

标签 java swing jtextfield keylistener

我有一个 JTextField。当用户输入 aj 时,我希望文本字段中的文本为大写(例如输入“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) {
           }
        });
    }
}

最佳答案

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

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

}

关于java - 如何在 java swing 中为文本字段使用过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11890774/

相关文章:

java - 将 jtextfield 设置为数据库结果

java - Java服务器选项

java - 填充两个 CubicCurve2D.Float 和一条线内的区域

java - 在 JTable 中显示 JLabel

java - 如何创建 jTextField.checkEmpty()

java - 使光标在 JTable 内的 JTextField 中可见,无需左键单击

java - Twilio 功能 token 变得越来越长

Java Springboot Hibernate 设置 Oracle 数据库 session 参数

java - 使用 Java Swing 创建内部向导

Java JTabbedPane 立即切换选项卡