質問: "他のキー"; } lb2.setText(str + "ですね。"); } } }
回答: 提示されたコードを動かしてみたところ、 確かに押されたキーが拾えないことを確認しました。 どうやら、表示されているアプレットがフォーカスを取得できていない事が 原因のようです。 解決策としては、 ``` public void init(){ // 初期表示の際にフォーカスを得る setFocusable(true); Container cnt = getContentPane(); lb1 = new JLabel("矢印キー"); lb2 = new JLabel(); cnt.add(lb1, BorderLayout.NORTH); cnt.add(lb2, BorderLayout.SOUTH); addKeyListener(new SampleKeyListener()); } ``` のように、`init()` 内に `setFocusable(true)`を指定することで アプレットがフォーカスを取得できるようになり、キーイベントも正常に拾えました。 ただ、ここで指定している値はデフォルトで `true` になっているようなので、 なぜ初期状態でフォーカスを取得できるようになっていないのかは謎ですね... 詳しい理由が判明した場合は追記させていただきます。 ### 追記(2016/11/6) コメント欄にてご指摘いただきました。 今回の様にアプレット起動時にフォーカスを取得する必要があるならば、 `setFocusable(true)` を指定して解決することがベターである。 しかし、`focusable` 自身の値はデフォルトで `true` であり、`setFocusable(true)` の 意図が後からコードを見たときに分からなくなる可能性があるため、 コメントなどを付記するのが良い、との結論に至りました。 (`setFocusable(true)`を指定する理由や、詳しい経緯はコメント欄を参照下さい) ご意見下さいました KSwordOfHaste さん、ありがとうございました。