4

このJTextFieldのコンテンツをSQLクエリで送信する前に(SqlExceptionを回避するために)、JTextFieldに'numbers'のみが含まれ、(+、-)が含まれていないことを確認できるようにしたいと考えています。

が欲しいです :

  • 文字を入力すると、JLabelが表示され、JTextFieldの色が赤に変わります。

    label_errer.setVisible(true);

  • 文字を削除すると、JLabelが消え、JTextFieldの色は正常になります。

    label_errer.setVisible(false);

「Enter」をクリックすると、次のコードが機能します。

            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 を使用するDocumentFilterことを検討してください。もう少し複雑ですが、よりクリーンな方法であり、同時変更の例外は発生しません。

を作成する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 に答える