イメージの利用とイベント処理 (3/6)
作成:2009-12-30 09:57
更新:2009-12-30 09:57
更新:2009-12-30 09:57
■Canvasのイベント処理
次に、Canvasのイベント処理について考えてみましょう。Panelでは、各種のイベントリスナーが用意されており、これを使ってイベント処理を実装しましたが、Canvasではこうしたイベントリスナーはありません。ではどうするのか?というと、Canvasに用意されているイベント処理用のメソッドをオーバーライドして処理をします。これは以下のような形をしています。
※Canvasのイベント処理用メソッド
public void processEvent(int type, int param) {
……イベント処理を用意……
}
引数にはイベントの種類を示す値と必要ならばパラメータの値が渡されます。実をいえば、Canvasに用意されているイベント処理機能は、実にこのメソッド1個だけです。何があっても、すべてこのメソッドでまとめて処理されます。
ですから、この中でどういうイベントが発生し、どういうパラメータが送られたかに応じてすべての処理を用意する必要があります。では、実際にサンプルを作成してイベント処理を行ってみましょう。
ここでは、5×5の盤面を用意し、そこにイメージを表示するようにしました。現在、選択されているマス目には、赤い枠が表示されます。上下左右キーで選択するマス目を移動することができます。そして選択キーを押すと、そのマス目のイメージの表示をON/OFFすることができます。
※Canvasのイベント処理用メソッド
public void processEvent(int type, int param) {
……イベント処理を用意……
}
引数にはイベントの種類を示す値と必要ならばパラメータの値が渡されます。実をいえば、Canvasに用意されているイベント処理機能は、実にこのメソッド1個だけです。何があっても、すべてこのメソッドでまとめて処理されます。
ですから、この中でどういうイベントが発生し、どういうパラメータが送られたかに応じてすべての処理を用意する必要があります。では、実際にサンプルを作成してイベント処理を行ってみましょう。
ここでは、5×5の盤面を用意し、そこにイメージを表示するようにしました。現在、選択されているマス目には、赤い枠が表示されます。上下左右キーで選択するマス目を移動することができます。そして選択キーを押すと、そのマス目のイメージの表示をON/OFFすることができます。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※MainCanvasの修正 class MainCanvas extends Canvas { private Image image; private static final int MAX_X = 5,MAX_Y = 5; private static final int IMG_W = 32,IMG_H = 32; private int x, y; private boolean[][] flg; MainCanvas() { this.setSoftLabel(Frame.SOFT_KEY_2, "EXIT"); flg = new boolean[MAX_X][MAX_Y]; try { MediaImage mi = MediaManager.getImage("resource:///image.gif"); mi.use(); image = mi.getImage(); } catch (ConnectionException e) { } } public void paint(Graphics g) { g.lock(); g.clearRect(0, 0, this.getWidth(), this.getHeight()); for (int i = 0; i < MAX_X; i++) { for (int j = 0; j < MAX_Y; j++) { if (flg[i][j]) { g.drawImage(image, i * IMG_W, j * IMG_H); } } } g.setColor(Graphics.getColorOfName(Graphics.RED)); g.drawRect(IMG_W * x, IMG_H * y, IMG_W, IMG_H); g.unlock(true); } public void processEvent(int type, int param) { super.processEvent(type, param); switch (type) { case Display.KEY_PRESSED_EVENT: switch (param) { case Display.KEY_UP: y -= y == 0 ? 0 : 1; break; case Display.KEY_DOWN: y += y == MAX_Y - 1 ? 0 : 1; break; case Display.KEY_LEFT: x -= x == 0 ? 0 : 1; break; case Display.KEY_RIGHT: x += x == MAX_X - 1 ? 0 : 1; break; case Display.KEY_SELECT: flg[x][y] = !flg[x][y]; break; case Display.KEY_SOFT2: IApplication.getCurrentApp().terminate(); break; } repaint(); } } }
※関連コンテンツ