2012-07-14 19 views
6

に応答しません。今、キーボードのいずれかのキーを押すと、KeyListenerメソッドのうちのどれかが呼び出されず、helloWorldにウィンドウフォーカスがないようです。私もhelloWorld.requestFocusInWindow();を呼び出そうとしましたが、まだ応答しません。JPanelのは、私がフレームに<code>HelloWorld</code>のオブジェクトを追加<code>JPanel</code></p> <pre><code>public class HelloWorld extends JPanel implements KeyListener </code></pre> <p>から拡張クラスを使用しています<code>JFrame</code>のサブクラスを持っているのKeyListenerイベント

キープレスにどのように反応させることができますか?

+1

を追加する必要があります[キーバインディング](http://docs.oracle.com/javaseに見て/tutorial/uiswing/misc/keybinding.html)。問題を解決するかもしれないし、解決しないかもしれないが、一般的にはSwingにとってより良いアプローチである。 –

答えて

11

あなたのHelloWorldパネルがKeyListenerのパネルがそのパネルになるように設定しましたか?また、おそらく、そのパネルをフォーカス可能に設定する必要があります。私はこのコードでそれをテストし、動作するようですそれが必要として

class HelloWorld extends JPanel implements KeyListener{ 
    public void keyTyped(KeyEvent e) { 
     System.out.println("keyTyped: "+e); 
    } 
    public void keyPressed(KeyEvent e) { 
     System.out.println("keyPressed: "+e); 
    } 
    public void keyReleased(KeyEvent e) { 
     System.out.println("keyReleased: "+e); 
    } 
} 

class MyFrame extends JFrame { 
    public MyFrame() { 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setSize(200,200); 

     HelloWorld helloWorld=new HelloWorld(); 

     helloWorld.addKeyListener(helloWorld); 
     helloWorld.setFocusable(true); 

     add(helloWorld); 
     setVisible(true); 
    } 
    public static void main(String[] args) { 
     new MyFrame(); 
    } 
} 
シンプル
+0

カスタムのマウスリストがある場合、 'grabFocus()'を忘れてはいけません –

8

JPanelはデフォルトではフォーカスできません。つまり、フォーカスに関連するイベントに応答できません。つまり、キーイベントに応答できません。

私は、ペインのsetFocusableをtrueにしてもう一度試してみることをお勧めします。最初にパネルをクリックして、フォーカスを受け取っていることを確認してください。

ユーザーがフォームをナビゲートするときにパネルが入力フォーカスを受け取るため、焦点がどこかで失われたように見えるため、奇妙なフォーカストラバーサルの問題が発生します。

また、KeyListenerは、このような状況では(フォーカスマネージャが動作するために)信頼性が低い傾向があります。

0

あなたは

addKeylistener(new HelloWorld()); 
関連する問題

 関連する問題