如何监听JTextField中字符的输入?

时间:2012-05-17 22:10:50

标签: java swing numbers actionlistener jtextfield

我希望能够在Sql查询中发送此JTextField的内容之前验证JTextField是否只包含'numbers'和no(+, - )(以避免SqlException)。

我想:

  • 如果我输入一个字母,则会显示一个JLabel,并且JTextField的颜色会变为红色。

    label_errer.setVisible(true);

  • 如果删除该字母,JLabel将消失,JTextField的颜色正常。

    label_errer.setVisible(false);

如果我点击“输入”,以下代码可以使用:

            textField_app = new JTextField(3);
    textField_app.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {


            JTextField source = (JTextField) e.getSource();
            String textFieldContent = source.getText();

            Color bgColor = Color.RED;

            boolean isNumeric=false;
            try { 

                Integer.parseInt(textFieldContent);
                 isNumeric = true;
                bgColor = Color.WHITE;
                label_errA.setVisible(false);
            } catch (Exception e2) {
                 // ---> isNumeric=false
            }

            source.setBackground(bgColor);


            if(isNumeric==false){
                label_errA.setEnabled(true);
                label_errA.setVisible(true);


            }

        }
    });

这个解决方案有效,但还有另一个吗?

        textField_app = new JTextField(3);
    KeyListener keyListener = new KeyListener() {
          public void keyPressed(KeyEvent keyEvent) {
            printIt("Pressed", keyEvent);
          }

          public void keyReleased(KeyEvent keyEvent) {
            printIt("Released", keyEvent);
          }

          public void keyTyped(KeyEvent keyEvent) {
            printIt("Typed", keyEvent);
          }

          private void printIt(String title, KeyEvent keyEvent) {
            int keyCode = keyEvent.getKeyCode();
            String keyText = KeyEvent.getKeyText(keyCode).toString();


            if(keyCode==(getKeyBinding(keyText))){ 
            textField_app.setBackground(new Color(220, 20, 60));
            label_errA.setEnabled(true);
            label_errA.setVisible(true);
            }
            else  {
                 Color bgColor =Color.WHITE;
                 textField_app.setBackground(bgColor);

                label_errA.setEnabled(false);
                label_errA.setVisible(false);
            }

          }
        };


public int getKeyBinding(String k){
  if(k.equals("A")){
   return KeyEvent.VK_A;
  } else if(k.equals("B")){
   return KeyEvent.VK_B;
  } else if(k.equals("C")){
   return KeyEvent.VK_C;
  } else if(k.equals("D")){
   return KeyEvent.VK_D;
  } else if(k.equals("E")){
   return KeyEvent.VK_E;
  } else if(k.equals("F")){
   return KeyEvent.VK_F;
  } else if(k.equals("G")){
   return KeyEvent.VK_G;
  } else if(k.equals("H")){
   return KeyEvent.VK_H;
  } else if(k.equals("I")){
   return KeyEvent.VK_I;
  } else if(k.equals("J")){
   return KeyEvent.VK_J;
  } else if(k.equals("K")){
   return KeyEvent.VK_K;
  } else if(k.equals("L")){
   return KeyEvent.VK_L;
  } else if(k.equals("M")){
   return KeyEvent.VK_M;
  } else if(k.equals("N")){
   return KeyEvent.VK_N;
  } else if(k.equals("O")){
   return KeyEvent.VK_O;
  } else if(k.equals("P")){
   return KeyEvent.VK_P;
  } else if(k.equals("Q")){
   return KeyEvent.VK_Q;
  } else if(k.equals("R")){
   return KeyEvent.VK_R;
  } else if(k.equals("S")){
   return KeyEvent.VK_S;
  } else if(k.equals("T")){
   return KeyEvent.VK_T;
  } else if(k.equals("U")){
   return KeyEvent.VK_U;
  } else if(k.equals("V")){
   return KeyEvent.VK_V;
  } else if(k.equals("W")){
   return KeyEvent.VK_W;
  } else if(k.equals("X")){
   return KeyEvent.VK_X;
  } else if(k.equals("Y")){
   return KeyEvent.VK_Y;
  } else if(k.equals("Z")){
   return KeyEvent.VK_Z;
  } 
else{
   return 0;
  }
 }

4 个答案:

答案 0 :(得分:3)

您正在寻找JFormattedTextField。您拥有自己开始的所有信息here

答案 1 :(得分:3)

您应该采取的措施来检测每次按键是use a DocumentListener。但由于您的目标是验证,请查看using a DocumentFilter instead。它有点复杂,但它是一种更简洁的方法,你不会得到任何并发的修改例外。

你可以创建一个DocumentFilter,然后每个按键都需要通过过滤器的检查(一种粗略的方式来放置它,但相当准确)。如果过滤器认为它没问题,它会通过它。您还可以添加自己的任何操作,例如将字段变为红色,如上所述。

答案 2 :(得分:1)

我认为您正在寻找java.awt.event.KeyListener而不是ActionListener。使用KeyTyped()功能。

答案 3 :(得分:0)

我写了一个图书馆,如果你愿意,我可以给你一个链接,它给你的文字字段只能取数字,而不是别的。

是的,您也可以查看来源,没问题。