【Java】キー入力処理

2018年1月1日

本稿はJavaでキー入力処理を実装してみます。

キー入力の方法には、KeyListenerを実装し、メソッドをオーバーライドして利用する方法とenableEventsで有効化し、processKeyEventメソッドをオーバーライドする方法があります。

今回は、KeyListenerをJFrameに実装して、キー入力する方法を紹介していきます。

キー入力処理の実装

キー入力を有効化するにはKeyListenerを実装し、JFrame等のaddKeyListenerを呼び出しましょう。

まずは、KeyListenerの実装ですが、keyPressed、keyReleased、keyTypedのメソッドをオーバーライドしましょう。使用するのはkeyPressed、keyReleasedのみで問題ありません。

keyPressedメソッドはキーを押した時に呼び出されるメソッドで、keyReleasedがキーが離された時に呼び出されるメソッドです。

そして、どのキーが入力されたかはKeyEventのgetKeyCodeで値を取得し、KeyEventの定数と比較しましょう。

それでは実装サンプルをご覧ください。

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;

public class Test{
	public static void main(String[] args) {
		TestWindow gw = new TestWindow("テストウィンドウ",400,300);
		gw.setVisible(true);
	}
}
class TestWindow extends JFrame implements KeyListener{
	public TestWindow(String title, int width, int height) {
		super(title);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setSize(width,height);
		setLocationRelativeTo(null);
		setLayout(null);
		setResizable(false);

		//キー入力の有効化
		addKeyListener(this);
	}

	@Override
	public void keyTyped(KeyEvent e) {
		//使用しないので空にしておきます。
	}

	@Override
	public void keyPressed(KeyEvent e) {
		switch ( e.getKeyCode() ) {
		case KeyEvent.VK_UP:
			//上キー
			System.out.println("上が押されました");
			break;
		case KeyEvent.VK_SPACE:
			//スペースキー
			System.out.println("スペースが押されました");
			break;
		case KeyEvent.VK_ENTER:
			//エンターキー
			System.out.println("Enterが押されました");
			break;
		}
	}

	@Override
	public void keyReleased(KeyEvent e) {
		switch ( e.getKeyCode() ) {
		case KeyEvent.VK_UP:
			//上キー
			System.out.println("上が離されました");
			break;
		case KeyEvent.VK_SPACE:
			//スペースキー
			System.out.println("スペースが離されました");
			break;
		case KeyEvent.VK_ENTER:
			//エンターキー
			System.out.println("Enterが離されました");
			break;
		}
	}
}
実行結果

上が押されました
上が離されました
Enterが押されました
Enterが離されました
スペースが押されました
スペースが離されました

実行後に上キー、Enterキー、スペースキーを押してみると上記の結果になりました。

各種キーコードの比較はKeyEvent.VK_~の定数を利用すると他のキーでも判断可能です。

KeyEvent定数はこちらを参考にしてください。