Pessoal to precisando de ajuda nos seguintes problemas…os códigos estão abaixo…
tipo to fazendo um programa que mostra um mapa… to usando a função Translate… só que quando chega no fim da imagem… ele sempre continua andando um pouco depois que ela acaba… alguem teria um forma de evitar isso
outra coisa… to usando uma Função Chamada DisplayManager, ele que faz a transição do Midlet principal para as outras telas… só que quando entro na classe ExibeMapa naum consigo ir para a ListarRotas. alguem poderia me ajudar.
e to tentando rodar esse programa no emulador de palm mais sempre depois do login, antes de carregar o mapa, da esse erro: No Such Method getWidth()|
Alguem sabe pq disso?
Código:
TelaLogin.Java
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.Timer;
import java.util.TimerTask;
public class TelaLogin extends MIDlet implements CommandListener {
public Display display;
public Form fmlogin;
private TextField user;
private TextField senha;
private Command sair;
private Command login;
private Image im = null;
protected ExibeMapa Mapa;
public DisplayManager displaymgr;
protected ListarRotas Rotas;
public TelaLogin(){
display = Display.getDisplay(this);
fmlogin = new Form("Tela de Login");
user = new TextField("Usuário","",25,TextField.ANY);
senha = new TextField("Senha","",25,TextField.PASSWORD|TextField.NUMERIC);
login= new Command("Login", Command.OK,1);
sair = new Command("Sair", Command.EXIT,1);
displaymgr = new DisplayManager(display, Mapa);
Mapa = new ExibeMapa(this);
Rotas = new ListarRotas("Lista de Rotas",List.IMPLICIT,this);
}
protected void startApp() {
fmlogin.append(user);
fmlogin.append(senha);
fmlogin.addCommand(login);
fmlogin.addCommand(sair);
fmlogin.setCommandListener(this);
display.setCurrent(fmlogin);
}
protected void pauseApp() {
}
protected void destroyApp(boolean arg0) {
}
public void Validauser(String name, String password) {
if (name.equals("1234") && password.equals("1234"))
{
Mapa = new ExibeMapa(this);
display.setCurrent(Mapa);
}
else {
Alert error = new Alert("Erro ao tentar Logar!!", "Por Favor, verifique se sua senha ou login estão corretos", null, AlertType.ERROR);
error.setTimeout(Alert.FOREVER);
user.setString("");
senha.setString("");
display.setCurrent(error, fmlogin);
}
}
void exitMIDlet() {
destroyApp(true);
notifyDestroyed();
}
public void commandAction(Command c, Displayable d) {
String label = c.getLabel();
if(label.equals("Sair")) {
exitMIDlet();
} else if(label.equals("Login")) {
this.Validauser(user.getString(),senha.getString());
}
}
}
ExibeMapa.java
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
class ExibeMapa extends Canvas implements CommandListener{
Image im = null;
Image im2 = null;
int translatey=0;
int translatex=0;
private Command cmExit;
private Command Listar;
private Command Atualizar;
int tx=0;
int ty=0;
private TelaLogin Tela;
public ExibeMapa(TelaLogin Tela){
super();
this.Tela = Tela;
setCommandListener(this);
cmExit = new Command("Sair", Command.EXIT,1);
Atualizar = new Command("Atualizar", Command.SCREEN,1);
Listar = new Command("Listar", Command.SCREEN,2);
addCommand(cmExit);
addCommand(Atualizar);
addCommand(Listar);
try {
im = Image.createImage("/Lorena.gif");
} catch(java.io.IOException e) {
System.err.println("Não foi possivel localizar o arquivo gif");
}
}
public void paint(Graphics g) {
g.setColor(255,255,255);
g.fillRect(0,0,getWidth(),getHeight());
g.translate(translatex,translatey);
if(im != null)
g.drawImage(im,0,0,Graphics.LEFT | Graphics.TOP);
}
protected void keyPressed(int keyCode) {
switch (getGameAction(keyCode)) {
case UP:
if(ty > -20) {
translatey =0;
repaint();
}
else {
translatey += 20;
ty=translatey;
repaint();
}
break;
case DOWN:
if(ty <-760) {
translatey = -760;
repaint();
} else {
translatey -=20;
ty=translatey;
repaint();
}
break;
case LEFT:
if(tx>-100) {
translatex = 0;
repaint();
} else {
translatex += 20;
tx=translatex;
repaint();
}
break;
case RIGHT:
if(tx < -760) {
translatex= -760;
} else {
translatex -= 20;
tx=translatex;
repaint();
}
break;
}
}
public void DesenharRota1(){
int i=100;
Graphics g = null;
while(i<250) {
g.setColor(255,0,0);
g.drawArc(i,i,2,2,0,360);
g.fillArc(i,i,2,2,0,360);
repaint();
}
}
public void commandAction(Command c, Displayable d) {
if(c == cmExit) {
Tela.exitMIDlet();
if(c == Listar)
Tela.displaymgr.pushDisplayabe(Tela.Rotas);
}
}
public int getWidth() {
int retValue;
retValue = super.getWidth();
return retValue;
}
}[/code]
ListarRota.java
[code]import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
class ListarRotas extends List implements CommandListener{
private TelaLogin Tela;
private Command Voltar;
public ListarRotas(String title, int listType, TelaLogin Tela){
super(title,listType);
this.Tela = Tela;
append("Veiculo 1",null);
append("Veiculo 2",null);
Voltar=new Command("Voltar", Command.BACK,1);
addCommand(Voltar);
setCommandListener(this);
}
public void commandAction(Command c, Displayable displayable) {
if(c==List.SELECT_COMMAND){
switch(getSelectedIndex()){
case 0:
Tela.Mapa.DesenharRota1();
Tela.displaymgr.popDisplayable();
break;
case 1:
Tela.Mapa.DesenharRota1();
Tela.displaymgr.popDisplayable();
break;
}
}
else if(c==Voltar)
Tela.displaymgr.popDisplayable();
}
}
[/code]
DisplayManager.java
[code]import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.*;
public class DisplayManager extends Stack {
private Display display;
private Displayable mainDisplayable;
private Alert alStackError;
public DisplayManager(Display display, Displayable mainDisplayable){
this.display=display;
this.mainDisplayable = mainDisplayable;
alStackError = new Alert("Displayable Stack Error");
alStackError.setTimeout(Alert.FOREVER);
}
public void pushDisplayabe(Displayable newDisplayable)
{
push(display.getCurrent());
display.setCurrent(newDisplayable);
}
public void home()
{
while (elementCount>1)
pop();
display.setCurrent(mainDisplayable);
}
public void popDisplayable()
{
if(empty()==false)
display.setCurrent((Displayable)pop());
else
display.setCurrent(alStackError, mainDisplayable);
}
}
Desde já agradeço!!!