Forms e Commands em várias classes

5 respostas
W

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

5 Respostas

C

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!

W

Olá clv,

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

Abraço.

Wellington

C

Olá,
Acompanhe comigo:

class ClasseOtra
{

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

}

Sacou?

W

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

W

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?

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();
		}
	}
	
}
Criado 28 de janeiro de 2005
Ultima resposta 1 de fev. de 2005
Respostas 5
Participantes 2