匿名質問者

java アプレットについての質問です。


os windows 7
eclipseで上下左右のキーとその他のキーを押した時、ウィンドウ下部に入力したキーを表示するアプレットを作りました。

しかし実行はできたのですが、キーを入力しても
下部に入力したキーが表示されません。

コードが間違えているのでしょうか?

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Sample7 extends JApplet{

private JLabel lb1, lb2;

public void init(){

//コンポーネントの作成
lb1 = new JLabel("矢印キーをお選びください。");
lb2 = new JLabel();

//コンテナへの追加
add(lb1, BorderLayout.NORTH);
add(lb2, BorderLayout.SOUTH);

//リスナの登録
addKeyListener(new SampleKeyListener());
}

//リスナクラス
class SampleKeyListener extends KeyAdapter{

public void keyPressed(KeyEvent e){
String str;
int k = e.getKeyCode();

switch(k){
case KeyEvent.VK_UP:
str = "上";break;
case KeyEvent.VK_DOWN:
str = "下";break;
case KeyEvent.VK_LEFT:
str = "左";break;
case KeyEvent.VK_RIGHT:
str = "右";break;
default:
str = "他のキー";
}

lb2.setText(str + "ですね。");
}
}
}

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/10/03 07:34:46

ベストアンサー

匿名回答1号 No.1

KeyListenerが登録されたコンポーネント(この場合だとSample7オブジェクト)がフォーカスを所有していないのでキーイベントがリスナに通知されないのだと思います。

適切な対処方法はよく分かりませんが、例えばinit()の最後に

        addComponentListener(new ComponentAdapter() {
            @Override
            public void componentShown(ComponentEvent e) {
                requestFocusInWindow();
            }
        });

を追加すると、意図したように動くのではないでしょうか。

  • 匿名質問者
    匿名質問者 2013/10/03 07:42:21
    意図した動きをさせることができました。
    requestFocusInWindow()メソッドを用いることまでは自力でわかったのですが、
    どの部分に書き込めばよいかわからず困っていました。

    余談ですが、オーバーライドの行い方にこのような方法があることも始めて知りました。
    助けになると同時に勉強になりました。
    ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません