Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

KeyListenerとActionListener

今、プログラムでActionListenerとKeyListenerを実装したクラスを使ってコードを記述しているのですが、なぜかActionListenerのみが動作してKeyListenerは動作しません。どのように記述すればよいのでしょうか?
ソースコードは以下の内容です。
public class MainWindow extends JFrame implements ActionListener,KeyListener{

boolean shiftPressed = false;

MainWindow(){

JPanel pnl = new JPanel();
SubButton[][] btn = new SubButton[10][10];

for(int i = 0; i < 10; i++){

    for(int j = 0; j < 10; j++){
        btn[i][j] == new SubButton(this , pnl ,i,j)
    }

}

addKeyListener(this)
}
public void keyTyped(KeyEvent e) {}
    public void keyPressed(KeyEvent e) {
        int key = e.getKeyCode();

        if (key == KeyEvent.VK_SHIFT){
            shiftPressed = true;
         }
    }
    public void keyReleased(KeyEvent e) {
        int key = e.getKeyCode();

        if (key == KeyEvent.VK_SHIFT){
             shiftPressed = false;
         }
    }
public void actionPerformed(ActionEvent e) {
    String key = e.getActionCommand;
    System.out.println(key);
}
public class SubButton extends JButton {
    
    SubButton(MainWindow window,JPanel pnl,int height,int width){
        addActionListener(window);
        setActionCommand(String.valueOf(height*10+width));
        setSize(20, 20);
          pnl.add(this);  
    }
}

3

回答

94309

閲覧

3件の回答

評価

0

>なぜかActionListenerのみが動作してKeyListenerは動作しません
addActionListenerしかしてないからではないでしょうか。

「何に」addActionListenerしてて、
「何に」addKeyListenerしたいのかもう一度考えてみると良いと思いますよ。

評価

50

KeyListenerが動くためにはそのコンポーネントがフォーカスされないと駄目です。
フォーカスを獲得出来るようにするにはsetFocusable(true);ですが、ボタンをクリックすると
フォーカスはボタンに移動しますのでフォーカスを獲得するためのコードが必要でしょう。
setFocusable(true);追加だけの場合でもフォーカス獲得にTabキーは使えます。

評価

0

ありがとうございます。
requestFocus()とsetFocusable()を使うと、エラーもなくなりました。
フォーカスという言葉は僕にとって未知の言葉だったのですが、おかげで仕組みを知ることができました!
本当にありがとうございます。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。