2012-03-02 9 views
2
 Jtxtfield.addKeyListener(new KeyListener() { 
     public void keyPressed(KeyEvent e) {}; 
     public void keyTyped(KeyEvent e) { 
      if(Jtxtfield.getText().equals("")) 
      System.out.println("hello1"); 
     }public void keyReleased(KeyEvent e) { 
      if(Jtxtfield.getText().equals("")) 
      System.out.println("hello2"); 
     } 
    }); 

押された最初のキー(「a」など)の出力はhello1です。 2番目のキー(「a」をもう一度)を押すと、(期待通りに)出力がありません。 削除キーを2回押すと、hello1 hello2が表示されます。KeyTypedメソッドでは、TextFieldが空白であると表示されます。

どうしてですか? keyTypedメソッドがtxtfieldを何も処理していないかのように扱うのはなぜですか?具体的には、テキストフィールドで最初に押されたキーを押すと、hello1しか得られないのはなぜですか?

答えて

6

テキストフィールドは、キー押下イベント、キー入力イベント、およびキーリリースイベントの3つのイベントを順次発生させます。キー入力イベントにはキーコード情報はありません。修飾子情報もありません。ユーザーがどの文字を入力するかだけ気にしている場合は、キー入力イベントを処理する必要があります。ユーザーがどのキーを押したかに関心がある場合は、キーの押下/離したイベントを処理する必要があります。

あなたは、テキストフィールドの値が

JTextField txt = (JTextField) e.getSource(); 
System.out.println(txt.getText()); 

あなたはhere

また、あなたがDocumentListenerを使用することができますを見つけることができる例として、keyReleased(KeyEventのe)を使用したい場合。

+1

JTextComponent用ではないDocumentListener、 – mKorbel

+0

これはどうして私の質問に答えるのですか? – user678392

関連する問題