Vários Forms em uma só classe

2 respostas
fzampa

Pessoal,

andei procurando saber e me informaram que em termos de performance é melhor colocar todas as minhas telas do programa J2ME em uma só classe.

Bom, ótimo, mas como fazer para a classe principal chamar a uma delas?

Pois faço assim (aprendi agora a pouco :slight_smile: ):
Crio uma classe que extends Form

e na principal faço:

B telaB= new B(); displayTela.setCurrent(telaB);

Como fazer para selecionar apenas um form desta classe??

A outra pergunta é:

Estou dentro do Form B e nele eu tenho um botão para Sair da aplicação.

Como chamar os métodos de finalização lá de tras, da classe principal???

Obrigado.

Ps.: para resolver meu segundo problema eu criei minha classe B extends Principal mas ao chamar o construtor de B ele deu o seguinte erro:

Uncaught exception java/lang/SecurityException: Application not authorized to access the restricted API.

Eu sei que é erro de segurança. Não posso herdar minhas próprias classes? A classe que está sendo herdada extends MIDlet.

Ps2.: Obrigado

2 Respostas

D

Olha, não sei se isso te resolve… mas olha aqui:

import javax.microedition.lcdui.*;

public class Forms extends Form {
  
    Form FormA,
             FormB,
               FormC;

     Command cmOK,
                     cmSair;

      public Forms() {
        
        cmOK = new Command("OK", Command.SCREEN, 1);
        cmSair = new Command("sair", Command.SCREEN, 2);
       
       FormA = new Form("Tela 1");
        FormA.addCommand(cmSair);
         FormA.setCommandListener(this);

       FormB = new Form("Tela 2");
        FormB.addCommand(cmSair);
         FormB.setCommandListener(this);
 
       FormC = new Form("Tela 3");
        FormC.addCommand(cmSair);
         FormC.setCommandListener(this);

        } //Fim do construtor

         public Form retornaForm(int tipo_Form) {
          
          if (tipo_Form == 1) {
              return FormA;
          }

           if (tipo_Form == 2) {
              return FormB;
          }
        
           if (tipo_Form == 3) {
              return FormC;
          }

         }// fim do retornaForm

} Fim da classe

Aí lá na sua classe principal, vc faz assim

[...]
Forms fmFORMS;

[...]
fmFORMS = new Forms();
[...]

display.setCurrent(fmFORMS.retornaForm(1));

[...]

Eu não fiz o teste aqui pois essa foi a solução mais rápida que eu encontrei apesar de eu ter minhas dúvidas se ela é mais elegante, mas resolve problema. Depois basta vc implementar os CommandListeners e ir para o abraço!!!

Qualquer coisa posta aí!

Abraços

fzampa

Eu estava fazendo assim, fiz diferente:

Na classe principal tenho uma thread que fica lendo as mensagens que a classe Forms envia.

Por exemplo, chegou a hora de criar um form900, aí eu faço:

na classe Forms:

e na classe principal:

public void run() { while(true) { if (forms.getMsg().equals("criaForm900")) { forms.setMsg(""); //limpo a mensagem Display.setCurrent(forms.getForm900()); //apresento o necessario } } }

E assim, a medida que eu for aumentando telas é só aumentar uma leitura de mensagem na classe principal.

Não sei se essa é a maneira mais certa, mas foi um jeito que eu achei de controlar todas as telas a partir de uma classe principal.

Em uma lista de discussão um cara me falou:

“que isso??? Pra que essas threads???”

Basicamente, cai nessa de ficar “perguntando” qual tela vai aparecer, né?

Criado 20 de novembro de 2004
Ultima resposta 24 de nov. de 2004
Respostas 2
Participantes 2