【问题标题】:How to listen to the input of a characters in a JTextField?如何收听 JTextField 中字符的输入?
【发布时间】:2012-05-25 12:43:48
【问题描述】:

我希望能够在 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;
  }
 }

【问题讨论】:

  • 如需尽快获得更好的帮助,请发布SSCCE。对于此用例,您可以使用 JSpinner 代替 JTextField
  • @MBenT :看看this 示例和this ...

标签: java swing numbers actionlistener jtextfield


【解决方案1】:

我写了一个库,如果你愿意,我可以给你一个链接,它为你提供了只能接受数字的文本字段。

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

【讨论】:

  • dl.dropbox.com/u/2978946/JNumberField.zip 给你。如果您觉得它有用,请批准它作为您对问题的回答。它有帮助:)
  • int keyCode = keyEvent.getKeyCode(); String keyText = KeyEvent.getKeyText(keyCode).toString(); if(keyText.equals("A")){ label_errA.setEnabled(true); label_errA.setVisible(true); } else { label_errA.setEnabled(false); label_errA.setVisible(false); } 如何比较多个字符?包含(CharSequence s)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    您正在寻找JFormattedTextField。您拥有所有信息here 来帮助您入门。

    【讨论】:

      【解决方案4】:

      要检测每次按键,您可能应该做的是use a DocumentListener。但由于您的目标是验证,请查看using a DocumentFilter instead。它有点复杂,但它是一种更简洁的方式,并且不会出现任何并发修改异常。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-17
        • 1970-01-01
        • 1970-01-01
        • 2014-07-16
        • 1970-01-01
        • 2014-01-25
        • 1970-01-01
        相关资源
        最近更新 更多