Показать сообщение отдельно
Старый 20.07.2011, 21:40   #1
SoboLEFF
AnyKey`щик
 
Аватар для SoboLEFF
 
Регистрация: 22.03.2009
Сообщений: 8
Написано 0 полезных сообщений
(для 0 пользователей)
Помогите переназначить обработчик событий другому классу

Подскажите как переназначить обработчик событий (.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) {}
}
(Offline)
 
Ответить с цитированием