2011-01-12 11 views
5

私はJComboBoxのサブクラスを持っています。私は、次のコードでキーリスナーを追加しようとします。ユーザーがJavaでenterキーを押したときの検出

 

     addKeyListener(new KeyAdapter() 
     { 
      public void keyPressed(KeyEvent evt) 
      { 
       if(evt.getKeyCode() == KeyEvent.VK_ENTER) 
       { 
        System.out.println("Pressed"); 
       } 
      } 
     }); 
 

これは、ユーザーがキーを押したときに正しく検出されません。実際には全く呼び出されません。このリスナーを間違って追加していますか?それを追加する他の方法はありますか?

+0

私たちに完全なコードを表示し、追跡が必要とされているコンボボックスにプレスを入力し、なぜ私が知っている可能性がありますしてください? –

+0

関数に問題がないようですが、それを呼び出す方法には何か問題があります。 –

+0

@ user489041のコードをもっと見る必要があります。このためにKeyListenerを使用しないでください。 – camickr

答えて

13

重要なイベントはボックス自体ではなく、そのエディタで発生します。 JComboBoxのエディタに直接keyListenerを追加する必要があります。

comboBox.getEditor().getEditorComponent().addKeyListener(new KeyAdapter() 
    { 
     public void keyPressed(KeyEvent evt) 
     { 
      if(evt.getKeyCode() == KeyEvent.VK_ENTER) 
      { 
       System.out.println("Pressed"); 
      } 
     } 
    }); 

編集:固定メソッド呼び出し。

1

これは適切な方法ではありません。 JComboBoxのエディターはJTextFieldです。 Enterキーを処理する場合は、テキストフィールドにActionListenerを追加します。

KeyListenersは常に使用しないでください。

編集:

comboBox.getEditorComponent().addActionListener(...); 
+1

サンプルコードを提供することは可能でしょうか? – user489041

+0

@ user489041、JButtonにActionListenerを追加したことがありますか?コードはまったく同じです。まだ読んでいない場合は、「アクション・リスナーの作成方法」(http://download.oracle.com/javase/tutorial/uiswing/TOC.html)のSwingチュートリアルのセクションを読んでください。 – camickr

+0

comboBox.getEditor()。addActionListener(...)が必要です。 – Alex

関連する問題