【Java】キー入力処理

2018年1月1日

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

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

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

キー入力処理の実装

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

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

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

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

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

  1. import java.awt.event.KeyEvent;
  2. import java.awt.event.KeyListener;
  3.  
  4. import javax.swing.JFrame;
  5.  
  6. public class Test{
  7. public static void main(String[] args) {
  8. TestWindow gw = new TestWindow("テストウィンドウ",400,300);
  9. gw.setVisible(true);
  10. }
  11. }
  12. class TestWindow extends JFrame implements KeyListener{
  13. public TestWindow(String title, int width, int height) {
  14. super(title);
  15. setDefaultCloseOperation(EXIT_ON_CLOSE);
  16. setSize(width,height);
  17. setLocationRelativeTo(null);
  18. setLayout(null);
  19. setResizable(false);
  20.  
  21. //キー入力の有効化
  22. addKeyListener(this);
  23. }
  24.  
  25. @Override
  26. public void keyTyped(KeyEvent e) {
  27. //使用しないので空にしておきます。
  28. }
  29.  
  30. @Override
  31. public void keyPressed(KeyEvent e) {
  32. switch ( e.getKeyCode() ) {
  33. case KeyEvent.VK_UP:
  34. //上キー
  35. System.out.println("上が押されました");
  36. break;
  37. case KeyEvent.VK_SPACE:
  38. //スペースキー
  39. System.out.println("スペースが押されました");
  40. break;
  41. case KeyEvent.VK_ENTER:
  42. //エンターキー
  43. System.out.println("Enterが押されました");
  44. break;
  45. }
  46. }
  47.  
  48. @Override
  49. public void keyReleased(KeyEvent e) {
  50. switch ( e.getKeyCode() ) {
  51. case KeyEvent.VK_UP:
  52. //上キー
  53. System.out.println("上が離されました");
  54. break;
  55. case KeyEvent.VK_SPACE:
  56. //スペースキー
  57. System.out.println("スペースが離されました");
  58. break;
  59. case KeyEvent.VK_ENTER:
  60. //エンターキー
  61. System.out.println("Enterが離されました");
  62. break;
  63. }
  64. }
  65. }
実行結果

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

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

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

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