Forms e Commands em várias classes

Olá! Estou com uma dúvida.
Gostaria de saber como um Form em uma classe que não seja
a principal, possa acessar Commands da classe principal.
Na verdade seria assim: estou numa tela de login, por exemplo.
O usuário vai logar e aparece outra tela de espera. Nessa tela tem
um command “voltar”. Como faço para voltar para a tela anterior?

Eu queria fazer duas classes: Principal e Login. Na Principal haveria os commands, tela de inicialização. E na Login haveria commands para voltar e ok, tela de login e tela de espera, tela de resultado. Sei que tenho que usar referências, mas como?

Podem me ajudar?

Obrigado,

Wellington

Olá,
Sempre passe a classe principal como parâmetro das outras classes aí vc tem referência ao objeto displayable da classe principal.

Até mais!

Olá clv,

Obrigado por responder. Você poderia me dar um exemplo
para eu ver se estou certo?!

Abraço.

Wellington

Olá,
Acompanhe comigo:

class ClasseOtra
{

... 
 MainClasse principal;
 public ClasseOtra(MainClasse main)
 {
         this.principal=main;
 }
....
 public void metodoQualquer()
 {
         this.principal.metodoDaMain();
 }
...

}

Sacou?

Olá clv, obrigado por responder novamente. Agora entendi melhor.
Abraço.

Poderia me ajudar a encontrar o erro nesse código? Ele executa até a linha 239, onde tem System.out.println(“2mat–>”+sMatricula); no método run() e depois mostra o Form de resultado. Queria dividir em classes, poderia me ajudar?

[code]package amsa;

import java.io.InputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Vector;
import javax.microedition.io.Connector;
import javax.microedition.io.ConnectionNotFoundException;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Choice;
import javax.microedition.lcdui.ChoiceGroup;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.ImageItem;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.Item;
import javax.microedition.lcdui.ItemStateListener;
import javax.microedition.lcdui.Screen;
import javax.microedition.lcdui.StringItem;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class Amsa extends MIDlet
implements CommandListener, Runnable
{
//private Displayable anterior;
private Display dTela;
private final ChoiceGroup chOpcoes;
private Command cSair;
private Command cOk;
private Command cVoltar;
private Form fAguarde;
private Form fInicial;
private Form fLogin;
private Form fOpcoes;
private Form fResultado;
private ImageItem iLogo;
private TextField tfMatricula;
private TextField tfSenha;
private StringItem sResultado;

public Amsa()
{

	//Instanciar os Commands
	cSair = new Command("Sair", Command.EXIT, 0);
	cOk = new Command("Ok", Command.OK, 0);
	cVoltar = new Command("Voltar", Command.BACK, 0);
	
	//Instanciar o Form inicial
	fInicial = new Form("Terminal de consultas");
	
	//Adiciona os Commands
	fInicial.addCommand(cOk);
	fInicial.addCommand(cSair);
	
	//Prepara o Form para escutar os comandos
	fInicial.setCommandListener(this);
	
	//Cria a imagem inicial
	iLogo = new ImageItem("", null, ImageItem.LAYOUT_CENTER, null);
	try
	{
		iLogo.setImage(Image.createImage("/glider.png"));
		
	} catch (Exception e) {}
	
	//Adiciona a imagem
	fInicial.append(iLogo);
	
	////////////////////////////////////////////////////////////////////////
	
	//Instanciar o Form de espera
	fAguarde = new Form("Conectando...");
	
	//Adiciona um StringItem ao Form
 	StringItem sEspera = new StringItem(null, "Aguarde...\nEm conexão...");
 	fAguarde.append(sEspera);
 		
 	//Adiciona o comando voltar
 	fAguarde.addCommand(cVoltar);
 		
 	//Prepara o Form para escutar os comandos
 	fAguarde.setCommandListener(this);
	
	////////////////////////////////////////////////////////////////////////
	//Instanciar o Form da resposta do servidor
	fResultado = new Form("Resultado da Pesquisa");
	
	//Adiciona um StringItem ao Form
	sResultado = new StringItem(null,null);
	fResultado.append(sResultado);
	
	//Adiciona o comando voltar
	fResultado.addCommand(cVoltar);
	
	//Prepara o listener
	fResultado.setCommandListener(this);
	////////////////////////////////////////////////////////////////////////
	
	//Instanciar o Form de opções
	fOpcoes = new Form("Tela de opções");
	
	//Instanciar o ChoiceGroup tipo "EXCLUSIVE" (RadioButton)
	chOpcoes = new ChoiceGroup("Escolha uma dessas", ChoiceGroup.EXCLUSIVE);
	
	//Adicionar opções ao ChoiceGroup
	int ctrl = chOpcoes.append("Notas", null);
	chOpcoes.append("Faltas", null);
	chOpcoes.append("Historico", null);
	
	//Seleciona "Notas" por padrão
	chOpcoes.setSelectedIndex(ctrl, true);
	
	 		
	//Adiciona um ChoiceGroup ao Form
	final int indiceChoiceGroup = fOpcoes.append(chOpcoes);
	
	//Adiciona o comando sair e ok
	fOpcoes.addCommand(cOk);
	fOpcoes.addCommand(cSair);
	
	//Prepara o Form para escutar os comandos
	fOpcoes.setCommandListener( new CommandListener(){
		public void commandAction(Command c, Displayable d)
		{
            if(c == cOk)
            {
                int band = chOpcoes.getSelectedIndex();
                                    
                switch(band)
                {
                	
                	case 0 :
                		
                		System.out.println("band com 0");
                		//Instanciar o Form de validação de usuário
						fLogin = new Form("Validação de Usuário");
						
						//Cria os TextFields
						tfMatricula = new TextField("Matrícula", "", 9, TextField.ANY);
						tfSenha = new TextField("Senha", "", 6, TextField.ANY | TextField.PASSWORD);
						
						//Adiciona os "Commands" e "TextFields" ao Form
						fLogin.append(tfMatricula);
						fLogin.append(tfSenha);
						fLogin.addCommand(cVoltar);
						fLogin.addCommand(cOk);
						
						dTela.setCurrent(fLogin);
				
						//Prepara o Form para "escutar" os comandos
						fLogin.setCommandListener(new CommandListener()
							{
								public void commandAction(Command cc, Displayable dd)
								{
									
									if(tfMatricula.size() == 9 && tfSenha.size() == 6)
									{
									
										conectar();
										dTela.setCurrent(fAguarde);
										System.out.println("você n está em run");
										
										/////////////////
									}
								}
									
							});
							
                		break;
                		
                	case 1 :
                		System.out.println("band com 1");
                		
                		break;
                		
                	case 2 :
                		System.out.println("band com 2");
                		
                		break;
                }		
                
            } else 
            {
            	
            	try
				{
					destroyApp(true);
								
				}catch(MIDletStateChangeException ex) {}
		
					notifyDestroyed();
            }                
        
		}
		});
	
	////////////////////////////////////////////////////////////////////////

}

	public void conectar(){
											
		Thread t = new Thread(this);
		t.start();	
	
	}
	
	public void run()
	{
		OutputStream saida = null;		
		InputStream is = null;
		HttpConnection con = null;
		System.out.println("vc esta em run");
		try 
		{							        	
		//Obtém a matrícula
		String sMatricula = tfMatricula.getString();
																					
		//Obtém a senha
		String sSenha = tfSenha.getString();
						        	
		System.out.println("mat--> "+sMatricula);
		con = (HttpConnection) Connector.open("http://127.0.0.1:6565/wcandeia/JServlet?user="+sMatricula);
						           
		con.setRequestMethod(HttpConnection.GET);
						            	            
		con.setRequestProperty("IF-Modified-Since", "20 Jan 2001 16:19:14 GMT");
		con.setRequestProperty("User-Agent","Profile/MIDP-1.0 Configuration/CLDC-1.0");
		con.setRequestProperty("Content-Language", "en-CA");
		System.out.println("2mat--> "+sMatricula);							              
		}catch(Exception ex)
		{	
			Alert alert = new Alert("Endereço Inválido",
			                "O endereço do servidor é inválido\n" +
			                      "Contate a administração", null,
									  AlertType.ERROR);
			alert.setTimeout(Alert.FOREVER);
			dTela.setCurrent(alert, fLogin);
			return;
		}
						        
						
		try 
		{
			if (con.getResponseCode() == HttpConnection.HTTP_OK) 
			{
			is = con.openInputStream();
			final int MAX_LENGTH = 4096;
			byte[] buf = new byte[MAX_LENGTH];
			int total = 0;
				while (total < MAX_LENGTH)
			    {
					int cont = is.read(buf, total, MAX_LENGTH - total);
						if (cont < 0)
						{
							break;
						}
						
					total += cont;
				}
						                
				is.close();
				String respondendo = new String(buf, 0, total);
				//if(respondendo != null) return true;
				//else return false;
				sResultado.setText(respondendo);
				}else
				{
					sResultado.setText("Falha do tipo " + con.getResponseCode() +
					                      "\n" + con.getResponseMessage());
				}
						            	
						for (int i = 0; ; i++)
				   		{
				    		String key = con.getHeaderFieldKey(i);
				       		String valor = con.getHeaderField(i);
				
				       			if (key == null)
				      			{
				       				break;
				       			}
				   		}
						            	
				   		con.close();
					    dTela.setCurrent(fResultado);
		} catch( ConnectionNotFoundException cnfe )
		{
			/** System.out.println(
		         		"URI could not be opened" );
		      			cnfe.printStackTrace();
		    			System.out.println("-->"+cnfe); */
		} catch (IOException ex)
		{	
		  		Alert alert = new Alert("Erro de E/S",
		              	    "Um erro ocorreu durante a comunicação com o servidor.",
		                      	null, AlertType.ERROR);
		   		alert.setTimeout(Alert.FOREVER);
		   		dTela.setCurrent(alert, fLogin);
		   		return;
		     
		} finally
		{
		try
		{
				if (is != null)
				{
					is.close();
		      		is = null;
		   		}
		} catch (IOException ex1) {}
						            		
		try
		{
				if (con != null)
				{
		     		con.close();
		       		con = null;
		   		}
		} catch (IOException ex1) {}
	}
}

public void startApp() throws MIDletStateChangeException
{
	dTela = Display.getDisplay(this);
	dTela.setCurrent(fInicial);
}

public void pauseApp() {}

public void destroyApp(boolean tORf) throws MIDletStateChangeException{ }

public void commandAction(Command c, Displayable d)
{
	
	if(c == cOk)
	{
		dTela.setCurrent(fOpcoes);
	}
	else if(c == cVoltar)
	{
		dTela.setCurrent(fInicial);
	}
	else if(c == cSair)
	{
		try
		{
			destroyApp(true);
		
		}catch(MIDletStateChangeException ex) {}
		
		notifyDestroyed();
	}
}

}
[/code]