Подскажите как переназначить обработчик событий (.setCommandListener) с класса "a" на класс "b" нажатием на клавишу FIRE (в коде класса "a" обозначена как /* ??? */).
Мейн класс BC:
import java.io.IOException;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class BC extends MIDlet implements CommandListener{
Command okCMD = new Command("Выбор", Command.EXIT, 0);
Command exitCMD = new Command("Выход", Command.EXIT, 9);
a beginGameMenu;
b Game;
static Display disp;
static Image begin;
static Image tank0green;
static Image tank0yellow;
public void startApp() {
try {
begin = Image.createImage("/img/begin.png");
tank0yellow = Image.createImage("/img/tank0yellow.png");
tank0green = Image.createImage("/img/tank0green.png");
} catch (IOException ex) {}
beginGameMenu = new a();
Game = new b();
beginGameMenu.start();
Game.start();
beginGameMenu.addCommand(exitCMD);
beginGameMenu.setCommandListener(this);
disp = Display.getDisplay(this);
disp.setCurrent(beginGameMenu);
}
public void pauseApp() {}
public void destroyApp(boolean unconditional) {
if(beginGameMenu != null) beginGameMenu.stop();
if(Game != null) Game.stop();
begin = null;
tank0green = null;
tank0yellow = null;
}
public void commandAction(Command command, Displayable displayable) {
if(command == exitCMD)
{
destroyApp(false);
notifyDestroyed();
}
}
}
Класс "a":
import javax.microedition.lcdui.*;
public class a extends Canvas implements Runnable {
boolean exit;
int beginImagePos;
int cycle;
int menuPos;
int yImageMenuPos;
int yImageMenuPosBack;
int key;
public a(){
super();
}
public void start() {
Thread thread = new Thread(this);
thread.start();
exit = true;
beginImagePos = 224;
cycle = 0;
menuPos = 1;
}
public void stop() {
exit = false;
}
public void run() {
while(exit){
if(beginImagePos >= 0) {beginImagePos = beginImagePos - 2;}
cycle();
menuPos();
repaint();
try {
Thread.sleep(50);
} catch (InterruptedException ex) {}
}
}
public void paint(Graphics graph) {
graph.setClip(0, 0, 255, 223);
if(beginImagePos >= 0) {graph.drawImage(BC.begin, 0, beginImagePos, 0);}
else {
graph.setColor(0, 0, 0);
graph.fillRect(65, yImageMenuPosBack, 13, 13);
graph.drawImage(Image.createImage(BC.tank0yellow, cycle, 13, 13, 13, 0),
65, yImageMenuPos, 0);
}
}
public void keyPressed(int keyCode) {
key = getGameAction(keyCode);
if (beginImagePos < 0) {
switch (key) {
case Canvas.UP:
if(menuPos > 1) {--menuPos;}
else {menuPos = 3;}
break;
case Canvas.DOWN:
if(menuPos < 3) {++menuPos;}
else {menuPos = 1;}
break;
case Canvas.FIRE:
/* ??? */
break;
}
}else {if (key != 0) {beginImagePos = 2;}}
}
private void cycle() {
if (cycle == 0) {cycle = 13;}
else {cycle = 0;}
}
private void menuPos() {
if (menuPos == 1) {yImageMenuPosBack = yImageMenuPos; yImageMenuPos = 124;}
if (menuPos == 2) {yImageMenuPosBack = yImageMenuPos; yImageMenuPos = 140;}
if (menuPos == 3) {yImageMenuPosBack = yImageMenuPos; yImageMenuPos = 156;}
}
}
Класс "b":
import javax.microedition.lcdui.*;
public class b extends Canvas implements Runnable{
boolean exit;
public b() {super();}
public void start() {
Thread thread = new Thread(this);
thread.start();
exit = true;
}
public void stop() {exit = false;}
public void run() {
while(exit) {
repaint();
try {
Thread.sleep(50);
} catch (InterruptedException ex) {}
}
}
public void paint(Graphics graph) {}
public void keyPressed(int keyCode) {}
}