【问题标题】:How to use a filter for textfields in java swing?java - 如何在java swing中对文本字段使用过滤器?
【发布时间】:2012-08-07 02:42:35
【问题描述】:

我有一个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) {
           }
        });
    }
}

【问题讨论】:

    标签: java swing jtextfield keylistener


    【解决方案1】:

    使用JFormattedTextField 类。如需更多信息,请参阅How to Use Formatted Text Fields

    【讨论】:

    • 我不确定 JFormattedTextField 是否足以满足此类要求....
    【解决方案2】:

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

    这是DocumentFilterPattern 的工作,简单的example

    【讨论】:

      【解决方案3】:

      您可以覆盖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);
      
      }
      

      【讨论】:

        猜你喜欢
        • 2016-11-08
        • 1970-01-01
        • 1970-01-01
        • 2018-03-06
        • 1970-01-01
        • 2011-10-17
        • 2018-05-22
        • 2014-06-09
        • 2021-02-20
        相关资源
        最近更新 更多