キーイベント処理について学習しよう
ボード内をマウスでクリックして、矢印キー(←、→、↑、↓)を押して下さい


import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class ren17 extends Applet{
  Image img;
  int x,y;
  int a;
  public void init(){
    img=getImage(getDocumentBase(),"ren17.gif");

    requestFocus();                  ←@
    addKeyListener(
        new KeyAdapter(){
          public void keyPressed(KeyEvent e){
          a=e.getKeyCode();              ←A
          switch(a){                 ←B
            case e.VK_UP  :{if(y>0)y=y-5;       ←C
                            break;}
            case e.VK_DOWN:{if(y<200)y=y+5;      ←D
                            break;}
            case e.VK_LEFT:{if(x>0)x=x-5;       ←E
                            break;}
            case e.VK_RIGHT:{if(x<200)x=x+5;      ←F
                            break;}
            }
            repaint();
          }
        }
    );
  }

  public void paint(Graphics g){
    g.drawImage(img,x,y,this);           ←G
  }
}



@入力フォーカスを要求する。
 キーイベントを受け付けるために必要


A押されたキーコードを取得する。

Bswitch〜case文
 複数分岐するときに用います。

 switch(a){
    case 0:{g.drawString(”0歳です”);
          break;}
    case 1:{g.drawString(”1歳です”);
          break;}
    case 2:{g.drawString(”2歳です”);
          break;}
    default:g.drawString(”それ以上です”);
 }

変数aが0の時は「0歳です」
     1の時は「1歳です」
     2の時は「2歳です」
それ以外の時「それ以上です」

と表示します。


C上矢印キーの時の処理
 もし、yの値が0より大きいときだけ、yから5ピクセル引きます。理由アプレットからイメージが飛び出ないようにするため

D〜F
 Cの説明を参考にしてください。


Gg.drawImage(img,x,y,this);
g.drawImage(img,x,y,20,20,this);
はじめは、上記のように縦横20ピクセルの大きさを指定してました。しかし、処理の遅いパソコンは表示されないことがあるので、大きさの指定はやめました。処理の早いパソコンをおもちの方は、大きさの指定をしてください。


問題 上記のプログラムを改良して、スペースキーを押すと5ピクセル縦横に大きくなり、ENTERキーを押すと5ピクセル縦横に小さくなるアプレットを作成しなさい。ただし、SPACEキーのキー定数はVK_SPACE、ENTERキーのキー定数はVK_ENTERです。
  ボード内をマウスでクリックし次の操作をしてください。
  矢印キーを押して移動させてください。SPACEキーを押して拡大してください。ENTERキーを押して縮小してください。