イメージの利用とイベント処理 (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();
}
}
}
※関連コンテンツ