Javaプログラミング

トップページ      |      目次
←前へ      次へ→

  • イベント処理
    • イベント処理
      • 一般的なGUIではマウスやキーボードの入力などのイベントに応じて処理を行う(イベント駆動型、もしくはイベントドリブン)
      • イベントの種類として主に以下のものがある。
        • キーボード入力
        • マウス操作
        • ウインドウ上のボタンが押された
        • プログラムの起動・終了
        • etc.
    • Javaにおけるイベント処理
      • 今回はキーボード入力のみによる操作を想定するので、キーボードイベントのみ扱う。キーボードイベントでは以下のクラスを使う
        • タイマーを使った実装
          • KeyEventクラス(java.awt.event)
          • KeyListenerクラス (java.awt.event)
        • その他のイベントが必要な場合は以下について調べてみましょう
          • マウスイベント:mouseEvent、mouseListener
          • ボタンなどGUI部品によるイベント:ActionEvent、ActionListener
    • キーボード操作の実装
      • これまで実装した、グラフィックス、アニメーション処理にキーボード操作を連動させる
      • 方向キーを押すと、矢印の方向に四角が動くようにする
      • 赤い四角を1秒ごとに10ピクセル分画面左から右に動かす
      • 実行結果
    • キーボードイベントの取得
      • キーボードイベントの取得にはKeyListener,KeyEventを使う
        • java.awt.event.KeyListener, java.awt.event.KeyEventをインポート
        • KeyListenerインタフェースをインプリメント
        • メソッドKeyTyped(), KeyPressed(), KeyReleased()を実装
        • 
                      import java.awt.event.KeyListener;
                      ・・・
                      public class Main implements KeyListener{
                      ・・・
                       public void keyTyped(KeyEvent e) {}
                       public void keyPressed(KeyEvent e) {}
                       public void keyReleased(KeyEvent e) {}
                      ・・・
                      }            
                  
    • キーボードが押された時の処理の実装
      • keyPressed()の中で押されたキーに対応する処理の記述
        • 押されたキーコードの取得はKeyEvent e.getKeyCode()メソッドで取得(キーコードはint型)
        • switch文などを使ってキーコードに対応した処理を記述
          • 上(up)を押されたら四角の座標値yを減らす(y軸は下向きが正)
            • キーコードはKeyEvent.VK_UP (実質の値は38)
          • 下(down)を押されたら四角の座標値yを増やす
            • キーコードはKeyEvent.VK_DOWN (実質の値は40)
          • 左(left)を押されたら四角の座標値xを減らす(x軸は右向きが正)
            • キーコードはKeyEvent.VK_LEFT (実質の値は37)
          • 右(right)を押されたら四角の座標値xを増やす
            • キーコードはKeyEvent.VK_RIGHT (実質の値は39)

          ※注意:x, yのスコープをクラス全体にする。(メソッドの外で宣言する)

        • KeyPressed()の実装例
        • 
                          public void keyPressed(KeyEvent e) {
                             switch(e.getKeyCode()){
                              case KeyEvent.VK_UP:
                               y-=10;
                               break;
                              case KeyEvent.VK_DOWN:
                               y+=10;
                               break;
                              case KeyEvent.VK_LEFT:
                               x-=10;
                               break;
                              case KeyEvent.VK_RIGHT:
                               x+=10;
                               break;
                             }
                            }                  
                      
    • キー入力を有効にする
      • フレーム(JFrame)のaddKeyListener()メソッドを使って、プログラムがキー入力を受け付ける(Listenする)ようにする
      • 引数にはプログラム自身(下の例ではthis)を指定する
      • 
                    public Main() throws InterruptedException{
                      JFrame f=new JFrame();
                     ・・・
                      f.addKeyListener(this);
                    }                 
                
    • はじめてのイベント処理(コード全体)
    • ※本コードではフレームに直接描画せず、描画用領域であるCanvasに描画している
        
                    import java.awt.Canvas;
                    import java.awt.Color;
                    import java.awt.Graphics;
                    import java.awt.event.KeyEvent;
                    import java.awt.event.KeyListener;
                    
                    import javax.swing.JFrame;
                    
                    public class GraphicsTest implements KeyListener{
                    
                      public int x,y;
                    
                        public GraphicsTest(){
                          JFrame f=new JFrame();
                          f.setTitle("Animation Test");
                          f.setSize(320,240);
                            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                          f.setVisible(true);
                    
                          //フレームに描画する準備(Canvas使用)
                        Canvas canvas=new Canvas();
                        canvas.setSize(320,240);
                        f.add(canvas);
                        Graphics g=canvas.getGraphics();
                        g.setColor(Color.red);
                        f.addKeyListener(this);
                    
                        //四角を描画(塗りつぶし)
                        x=100;
                        y=100;
                    
                        while(true) {
                          g.clearRect(0, 0, 320, 240);
                          g.fillRect(x, y, 50, 50);
                          try {
                            Thread.sleep(100);
                          } catch (InterruptedException e) {
                            e.printStackTrace();
                          }
                        }
                        }
                    
                        public static void main(String[] args){
                        new GraphicsTest();
                        }
                    
                      public void keyTyped(KeyEvent e) {
                      }
                    
                      public void keyPressed(KeyEvent e) {
                        switch(e.getKeyCode()){
                          case KeyEvent.VK_UP:
                            y-=10;
                            break;
                          case KeyEvent.VK_DOWN:
                            y+=10;
                            break;
                          case KeyEvent.VK_LEFT:
                            x-=10;
                            break;
                          case KeyEvent.VK_RIGHT:
                            x+=10;
                            break;
                        }
                      }
                    
                      public void keyReleased(KeyEvent e) {
                      }
                    }                
                
    • キーコード一覧
    • 対応キー キーコード
      1 49
      2 50
      3 51
      4 52
      5 53
      6 54
      7 55
      8 56
      9 57
      0 48
      A 65
      B 66
      C 67
      D 68
      E 69
      F 70
      G 71
      H 72
      I 73
      J 74
      K 75
      L 76
      M 77
      N 78
      O 79
      P 80
      Q 81
      R 82
      S 83
      T 84
      U 85
      V 86
      W 87
      X 88
      Y 89
      Z 90
      - 173
      ^ 160
      \ 220
      @ 64
      [ 219
      ] 221
      ; 59
      : 58
      , 188
      . 190
      / 191
      テンキー1 97
      テンキー2 98
      テンキー3 99
      テンキー4 100
      テンキー5 101
      テンキー6 102
      テンキー7 103
      テンキー8 104
      テンキー9 105
      テンキー0 96
      テンキー/ 111
      テンキー* 106
      テンキー- 109
      テンキー+ 107
      テンキー. 110
      テンキーEnter 13
      F1 112
      F2 113
      F3 114
      F4 115
      F5 116
      F6 117
      F7 118
      F8 119
      F9 120
      F10 121
      F11 122
      F12 123
      ↑ 38
      ↓ 40
      ← 37
      → 39
      Enter 13
      Shift 16
      Ctrl 17
      Alt 18
      Space 32
      BackSpace 8
      Esc 27
      Tab 9
      CapsLock 20
      NumLock 144
      Insert 45
      Delete 46
      Home 36
      End 35
      PageUp 33
      PageDown 34
      ScrollLock 145
      Windows 91
      英数 240
      半角/全角 243
      漢字 244
      無変換 29
      変換 28
      カタカナ/ひらがな/ローマ字 242

←前へ      次へ→