2011-10-24 10 views
1

KeyListenerクラスがネストされているクラスがありますが、イベントが登録されていないようです。助けのための内部クラスのJava KeyListenerが何らかの理由でイベントを取得しない

public class CaesarFrame extends JFrame{ 
     ... 
     private JTextField jtf1 = new JTextField(20); 
     ... 
     jtf1.addKeyListener(this.new InputFieldKeyListener()); 
     ... 
     class InputFieldKeyListener extends KeyAdapter{ 
       public void keyTyped(KeyEvent e) { 
        System.out.println(e.toString()); 
       } 
     } 
    } 

ありがとう:これはコードです...

私は、Javaにはかなり新しいですので、私は完全に間違って何かをやっているかもしれません!

+1

4行のコードは私たちを助けません。問題を示すSSCCEを投稿してください。 – camickr

+1

worksforme - 問題はドットの後ろに隠されています:-) – kleopatra

答えて

3

KeyListenerを追加する場合はthis.new ...が必要ですか?あなたがthis.を省略し、ちょうど入れてみてくださいすることができます

jtf1.addKeyListener(new InputFieldKeyListener()); 

また、あなたは正確に行うが、あなたは適切なイベントを使用していることを確認しようとしているかわかりません。 keyTypedと思われる場合は、JTextFieldがkeyPressedイベントまたはkeyReleasedイベントを生成している可能性があります。

keyTypedと同じ方法で2つの追加イベントを無効にして、どの出力が得られるかを確認します。それはそこにあるすべてかもしれない。

+0

あなたの提案をありがとう!他の2つのイベントはどちらも起動せず、 'this'を省略するとそれを変更するようには見えません。私は同じように宣言されたActionListenerを持つJButtonを持っていますが、それはちょっと変わっていますが、何かを見落とさなければなりません... – Zsipgun

+0

(1)*直ちに、KeyListenerを追加した行の後に、 System.out.println(jtf1.getKeyListeners()。length) 'それは' 0'以外のものを出力しますか、そして/またはNullPointerExceptionを取得しますか? (2)KeyListenerを追加した後で、誤って 'jtf1'を再宣言している可能性があります。そのため、KeyListenersの空のセットで新しいオブジェクトを作成していますか? – jefflunt

2

"キーボードイベントを発生させるには、コンポーネントにキーボードフォーカスが必要です。" - How to Write a Key Listener。あるいは、鍵バインディングを考慮してください。その例はanswers to this questionにあります。

関連する問題