Swing入門 (3) - キーボード入力

< Swing入門 (2) - ボタン

1. 概要

キーボードの入力にあわせて表示させる文字列を変化させます。

2. 説明

ボタンの場合と同様に、リスナー(Listener)を追加(add)します。
前回と今回の違いは次の2点です。

(1) 呼び出すメソッド
 前回:自身のメソッド
 今回:スーパークラス( JFrame)のメソッド
(2) 引数
 前回:インターフェイス実装クラス
 今回:インターフェイス実装クラスの継承クラス

具体的に見て行きます。

package swingsample;

import java.awt.BorderLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class KeyboardSample extends JFrame {
    
    private final JLabel label = new JLabel();
    
    public static void main(String[] args) {
        KeyboardSample mouseSample = new KeyboardSample();
    }
    
    public KeyboardSample() {
        
        add(label, BorderLayout.CENTER);
        
        // キーボード入力に対する処理
        addKeyListener(new KeyAdapter() { // (1)
            @Override
            public void keyPressed(KeyEvent e) { // (2)
                switch(e.getKeyCode()) {
                    case KeyEvent.VK_UP:
                        label.setText("(゚ - ゚)"); break;
                    case KeyEvent.VK_DOWN:
                        label.setText("(。 。)"); break;
                    default:
                        label.setText("(・_・)");
                }
            }
        });
        
        // ウィンドウの設定
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        setSize(200, 100);
        setVisible(true);
    }
}
補足

(1)について
前回のイベント処理(ボタンのクリック処理)では、
 button.addActionListener(...)
と、buttonのメソッドを呼び出す形でした。
今回はJFrameクラスのメソッドなので、あえて書くならば
 super.addKeyListener(...) となります。

(2)について
 addKeyListenerの引数となっているKeyAdapter*1は、KeyListenerインターフェイス*2を実装したクラスです。
 KeyListenerには複数のメソッドが定義されており、これらすべてを実装するのは冗長なので、 デフォルトの動作の定義されているクラスを継承して使おうというわけです。