Как прослушать ввод символов в JTextField?

Я хочу убедиться, что JTextField содержит только «числа» и не содержит (+, -) перед отправкой содержимого этого JTextField в запросе Sql (чтобы избежать исключения SqlException).

Я хочу :

  • если я ввожу букву, отображается JLabel, а цвет JTextField меняется на красный.

    label_errer.setVisible (истина);

  • если я удалю букву, JLabel исчезнет, ​​а цвет JTextField будет нормальным.

    label_errer.setVisible (ложь);

следующий код работает, если я нажму «ввод»:

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

person Dev M    schedule 17.05.2012    source источник
comment
Чтобы быстрее получить помощь, опубликуйте SSCCE. Вы можете использовать JSpinner вместо JTextField для этого варианта использования.   -  person Andrew Thompson    schedule 18.05.2012
comment
@MBenT: взгляните на это пример и это . ..   -  person nIcE cOw    schedule 18.05.2012


Ответы (4)


Вы ищете JFormattedTextField. У вас есть вся информация здесь, чтобы начать работу.

person Guillaume Polet    schedule 17.05.2012


Я думаю, вы ищете java.awt.event.KeyListener вместо ActionListener. Используйте функцию KeyTyped().

person user845279    schedule 17.05.2012

Я написал библиотеку, на которую я могу дать вам ссылку, если хотите, которая дает вам текстовые поля, которые могут принимать только числа и ничего больше.

Да, вы тоже можете посмотреть исходник, без проблем.

person OmniOwl    schedule 17.05.2012
comment
dl.dropbox.com/u/2978946/JNumberField.zip пожалуйста . Если вы сочтете это полезным, пожалуйста, одобрите это как свой ответ на вопрос. Это помогает :) - person OmniOwl; 18.05.2012
comment
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) - person Dev M; 18.05.2012