4

我希望能够在 Sql 查询中发送此 JTextField 的内容之前验证 JTextField 是否仅包含“数字”并且不包含 (+ , -)(以避免 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

4 回答 4

3

您正在寻找JFormattedTextField您可以在这里获得所有信息,让您自己入门。

于 2012-05-17T22:17:50.087 回答
3

您可能应该做的检测每次按键操作是使用DocumentListener. 但是由于您的目标是验证,请看一下使用 a DocumentFilterinstead。它有点复杂,但它是一种更清洁的方法,并且不会出现任何并发修改异常。

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

于 2012-05-17T22:18:00.690 回答
1

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

于 2012-05-17T22:13:26.680 回答
0

我写了一个库,如果你愿意,我可以给你一个链接,它为你提供只能接受数字而不能接受其他任何内容的文本字段。

是的,你也可以看源码,没问题。

于 2012-05-17T22:12:31.290 回答