Java で KeyListener を使用する
このチュートリアルでは、Java で KeyListener を使用する方法を紹介し、トピックを理解するためのサンプルコードをいくつか示します。
KeyListener
は、キーボードのキーの状態の変化を処理するインターフェースです。インターフェイスの名前が示すように、キーをリッスンし、それに応じて動作します。
このチュートリアルでは、このインターフェイスを実装し、主要なイベントを操作する方法を学習します。
KeyEvent
クラス
キーボードのキーが押されるたびに、KeyEvent
クラスのオブジェクトが KeyListener
に通知します。KeyEvent
クラスには、キーイベントに関する詳細情報を取得するために使用されるいくつかのメソッドがあります。このクラスの最も重要な 3つのメソッドを以下に要約します。
getKeyChar()
メソッドは、イベントに関連付けられたキー文字をフェッチします。この方法は、特定のキーにいくつかの機能を追加する場合に非常に役立ちます。たとえば、e
が押された場合、アプリケーションは終了する必要があります。getKeyCode()
メソッドは、getKeyChar()
メソッドと非常によく似ています。押されたキーに関連付けられた整数のキーコードを返します。isActionKey()
メソッドは、アクションキー(Caps Lock など)が押されたかどうかを判断できます。ブール値の true または false を返します。
KeyListener
インターフェースの実装
KeyListener インターフェースは、主要なイベントをリッスンし、いくつかのアクションを実行します。このインターフェースの宣言を以下に示します。
public interface KeyListener extends EventListener
このインターフェイスの次の 3つのメソッドをクラスでオーバーライドする必要があります。
keyPressed(KeyEvent e)
メソッドは、キーが押されたときに呼び出されます。- キーが離されると、
keyReleased(KeyEvent e)
メソッドが呼び出されます。 keyTyped(KeyEvent e)
メソッドは、キーが文字を入力したときに呼び出されます。
また、addKeyListener()
メソッドを使用します。KeyListener
インターフェースを実装するクラスのオブジェクトをこのメソッドに渡す必要があります。これは、重要なイベントをリッスンして反応するようにオブジェクトを登録する方法です。
KeyListener の簡単なアプリケーション
重要なイベントをリッスンし、コンソールに何かを出力する簡単なアプリケーションを作成しましょう。フレームを作成し、それにラベルを追加します。プログラムは、キー文字とキーアクションをコンソールに出力する必要があります。押されたキーがアクションキーの場合、プログラムは終了するはずです。
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class KeyListenerExample implements KeyListener {
@Override
public void keyTyped(KeyEvent e) {
System.out.println("The key Typed was: " + e.getKeyChar());
}
@Override
public void keyPressed(KeyEvent e) {
if (e.isActionKey())
System.exit(0);
System.out.println("The key Pressed was: " + e.getKeyChar());
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println("The key Released was: " + e.getKeyChar());
}
public static void main(String[] args) {
// Setting the Frame and Labels
Frame f = new Frame("Demo");
f.setLayout(new FlowLayout());
f.setSize(500, 500);
Label l = new Label();
l.setText("This is a demonstration");
f.add(l);
f.setVisible(true);
// Creating and adding the key listener
KeyListenerExample k = new KeyListenerExample();
f.addKeyListener(k);
}
}
出力:
The key Pressed was: a
The key Typed was: a
The key Released was: a
The key Pressed was: b
The key Typed was: b
The key Released was: b
KeyListener を使用したシンプルなゲームアプリケーション
矢印キーを入力として受け取る別のプログラムを作成しましょう。このプログラムは、押されたキーに応じて、数値 0 をマトリックス内の別の場所に移動します。出力はコンソールに出力されます。
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Arrays;
public class KeyListenerExample implements KeyListener {
// Matrix and x, y coordinates of 0
int[][] matrix;
int x;
int y;
KeyListenerExample() {
// Initializing the Matrix
matrix = new int[3][3];
matrix[0] = new int[] {1, 1, 1};
matrix[1] = new int[] {1, 0, 1};
matrix[2] = new int[] {1, 1, 1};
x = 1;
y = 1;
// Printing the Matrix
for (int i = 0; i < 3; i++) System.out.println(Arrays.toString(matrix[i]));
System.out.println();
}
// keyPressed() method takes care of moving the zero according to the key pressed
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
if (x != 2) {
x += 1;
System.out.println("Moving Right");
} else
System.out.println("Cannot Move Right");
}
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
if (x != 0) {
x -= 1;
System.out.println("Moving Left");
} else
System.out.println("Cannot Move Left");
}
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
if (y != 2) {
y += 1;
System.out.println("Moving Down");
} else
System.out.println("Cannot Move Down");
}
if (e.getKeyCode() == KeyEvent.VK_UP) {
if (y != 0) {
y -= 1;
System.out.println("Moving Up");
} else
System.out.println("Cannot Move Up");
}
matrix[0] = new int[] {1, 1, 1};
matrix[1] = new int[] {1, 1, 1};
matrix[2] = new int[] {1, 1, 1};
matrix[y][x] = 0;
for (int i = 0; i < 3; i++) System.out.println(Arrays.toString(matrix[i]));
System.out.println();
}
// We don't need the other two methods
@Override
public void keyReleased(KeyEvent e) {}
@Override
public void keyTyped(KeyEvent e) {}
public static void main(String[] args) {
// Setting the frame and labels
Frame f = new Frame("Demo");
f.setLayout(new FlowLayout());
f.setSize(200, 200);
Label l = new Label();
l.setText("This is a Game");
f.add(l);
f.setVisible(true);
// Creating and adding the key listener
KeyListenerExample k = new KeyListenerExample();
f.addKeyListener(k);
}
}
出力:
[1, 1, 1]
[1, 0, 1]
[1, 1, 1]
Moving Right
[1, 1, 1]
[1, 1, 0]
[1, 1, 1]
Cannot Move Right
[1, 1, 1]
[1, 1, 0]
[1, 1, 1]
Moving Left
[1, 1, 1]
[1, 0, 1]
[1, 1, 1]
Moving Left
[1, 1, 1]
[0, 1, 1]
[1, 1, 1]
Cannot Move Left
[1, 1, 1]
[0, 1, 1]
[1, 1, 1]
Moving Up
[0, 1, 1]
[1, 1, 1]
[1, 1, 1]
Cannot Move Up
[0, 1, 1]
[1, 1, 1]
[1, 1, 1]
Moving Down
[1, 1, 1]
[0, 1, 1]
[1, 1, 1]
Moving Down
[1, 1, 1]
[1, 1, 1]
[0, 1, 1]
Cannot Move Down
[1, 1, 1]
[1, 1, 1]
[0, 1, 1]
まとめ
クラスは、キーイベントをリッスンして反応するための KeyListener
インターフェイスを実装します。このチュートリアルでは、KeyEvent
クラスのいくつかの重要なメソッドを学びました。また、KeyListener インターフェースを実装する方法と、keyPressed()
、keyReleased()
、および keyTyped()
メソッドをオーバーライドする方法も学びました。また、このインターフェースの使用法を示すいくつかの例を見ました。