Não carrega Form

Pessoal,

Em minha aplicação, na minha classe principal, eu chamo a classe cliente para mostrar na tela um list com os clientes, mas não carrega na tela.
Estou postando o código abaixo. Quem puder dar uma olhada e souber o erro, por favor me ajude!!

Muito obrigado!

chamando a tela:

Display display = Display.getDisplay(Projeto.app); display.setCurrent(new Clientes());

tela de listagem: (que não carrega)

[code]import javax.microedition.lcdui.;
import java.util.
;

public class Clientes extends Form implements CommandListener
{
Display display;
List Cliente;

public Clientes()
{
    super("DevMobile");

    getCliente().deleteAll();
    display.setCurrent(Cliente);
}

List getCliente()
{
    if ( Cliente == null )
    {
        Cliente = new List("Cliente", Choice.IMPLICIT);
        Cliente.setCommandListener(this);
    }
    return Cliente;
}[/code]

por que?

como corrigir?

Simples, se você chama o setCurrent com o new Cliente(), dentro do construtor vc não pode ter (ou não deveria ter), outro setCurrent, referenciando um List que nem foi instanciado…

Lambança né ?!.. :cry:

Decida-se né…ou vc exibe o Form ou o List. Estrutura teu codigo melhor pois tá cheirando mal…

a dúvida deve ser ridícula, mas la vai:

  • eu não consigo ter um list e um form em uma mesma classe? É que eu fiz dessa maneira quando só tinha o midlet na minha aplicação e funcionava normal, aí eu resolvi criar essa classe para tentar organizar o código, mas parou de mostrar a tela.
  • eu terei que ter uma classe para cada tela que quero mostrar?

obs, eu tentei chamar um form ao invés do list, mas também não carrega.
eu fiz da mesma maneira, só que substitui o list pelo form…

o que ta errado?

Form getFormTelaCliente() { if (formTelaCliente == null) { formTelaCliente = new Form("cliente"); formTelaCliente.addCommand(closeCommand); formTelaCliente.setCommandListener(this); } return formTelaCliente; }

obrigado pela atenção
fico no aguardo!!

Vc pode ter list e form na mesma classe, mas do jeito que fez tava errada e dava exceção.

Post todo o codigo pois sinto que você tem mais coisa errada em outras partes.

[quote=boone]Vc pode ter list e form na mesma classe, mas do jeito que fez tava errada e dava exceção.

Post todo o codigo pois sinto que você tem mais coisa errada em outras partes.[/quote]

por enquanto só tem isso mesmo, eu não fiz o resto porque não funcionou essa parte ainda
por favor, se puder, me mostre o que ha de errado!!

obrigado!!

[code]package hello;

import javax.microedition.lcdui.;
import java.util.
;

public class Clientes extends Form implements CommandListener
{
Display display;
Command closeCommand;
List Cliente;
Form formTelaCliente;

public Clientes()
{
    super("DevMobile");
    closeCommand = new Command("Voltar", Command.BACK, 0);
    setCommandListener(this);

    getCliente().deleteAll();
    display.setCurrent(Cliente);
}

public void destroyApp (boolean unconditional) {}

public void pauseApp () {}

public void startApp () {}

public void commandAction(Command c, Displayable d)
{
    if ( c == closeCommand )
    {
        display.setCurrent(new Menu());
    }
}

List getCliente()
{
    if ( Cliente == null )
    {
        Cliente = new List("Cliente", Choice.IMPLICIT);
        Cliente.addCommand(closeCommand);
        Cliente.setCommandListener(this);
    }
    return Cliente;
}

Form getFormTelaCliente()
{
    if (formTelaCliente == null)
    {
        formTelaCliente = new Form("cliente");
        formTelaCliente.addCommand(closeCommand);
        formTelaCliente.setCommandListener(this);
    }
    return formTelaCliente;
}

}[/code]

boone, você poderia postar a maneira correta de chamar de uma classe e exibir o list da outra classe? É que estou testando várias maneiras, mas sem sucesso… e sem saber a correta não tem como aprender

agradeço se puder ajudar

se alguém mais se dispor tbm fico mto grato

Teu código tá muito zoneado…

public class Clientes extends Form implements CommandListener 

:arrow: Se existe o método startapp, esta classe Clientes deveria extender a classe MIDLet, não Form !!!
Do jeito q vc fez, não faz sentido em ter estes métodos startapp,destroyapp,pauseapp… :roll:

:arrow: Remova o display.setCurrent no construtor.
:arrow: Decida-se por usar Form ou List. Não tá fazendo sentido instanciar um Form (Clientes) e mandar exibir um List. Porquê Clientes já não extend List ? Pense…

Então, a idéia de usar o form e o list na mesma classe é que na classe anterior ao selecionar cliente abre essa classe com o list listando os cadastros, aí ao selecionar um item no list eu abro o form com as informações.

Removi as linhas que vc citou, mas e para essa situação que eu descrevi como eu faço??

Sendo assim, a Classe Clientes deveria extender List e não Form !

Daí o setCurrent vai exibir o List e no método commandAction vc chama um setCurrent para exibir o Form

bom, acho que estou começando a entender, mas mesmo assim não estou conseguindo!
eu fiz as duas tentativas abaixo, mas em nenhuma delas abre a tela.
eu debuguei e vi que ele passa por esse código, mas termina e não da resultado nenhum… pq será??

por favor, de uma olhada!!

obs. eu acho que a 1ª tentativa faz mais sentido do que a 2ª porque se eu quizer voltar do form para a listagem teoricamente funcionaria enquanto da segunda forma não

1ª Tentativa:

[code]package hello;

import javax.microedition.lcdui.;
import java.util.
;

public class CCliente extends List implements CommandListener
{
Command closeCommand;
Command formCommand;
List listCliente;
Form formCliente;

public CCliente()
{
    super("DevMobile", Choice.IMPLICIT);
    closeCommand = new Command("Voltar", Command.BACK, 0);
    formCommand = new Command("Abrir", Command.OK, 1);
    setCommandListener(this);
    Display display = Display.getDisplay(Projeto.app);
    display.setCurrent(listClientes);
}

List getlistClientes()
{
    if (listClientes == null)
    {
        listClientes = new List("clientes", Choice.IMPLICIT);
        listClientes.addCommand(closeCommand);
        listClientes.setCommandListener(this);
    }
    return listClientes;
}

Form getFormCliente()
{
    if (formCliente == null)
    {
        formCliente = new Form("cliente");
        formCliente.addCommand(closeCommand);
        formCliente.setCommandListener(this);
    }
    return formCliente;
}

public void commandAction(Command c, Displayable d)
{
    if ( c == formCommand )
    {
        Display display = Display.getDisplay(Projeto.app);
        display.setCurrent(FormCliente);
    }
}

}[/code]

2ª tentativa:

[code]package hello;

import javax.microedition.lcdui.;
import java.util.
;

public class CCliente extends List implements CommandListener
{
Command closeCommand;
Command formCommand;
List listCliente;
Form formCliente;

public CCliente()
{
    super("DevMobile", Choice.IMPLICIT);
    closeCommand = new Command("Voltar", Command.BACK, 0);
    formCommand = new Command("Abrir", Command.OK, 1);
    listClientes = new List("Clientes", Choice.IMPLICIT);
    listClientes.addCommand(closeCommand);
    listClientes.addCommand(formCommand);
    listClientes.setCommandListener(this);
}

Form getFormCliente()
{
    if (formCliente == null)
    {
        formCliente = new Form("cliente");
        formCliente.addCommand(closeCommand);
        formCliente.setCommandListener(this);
    }
    return formCliente;
}

public void commandAction(Command c, Displayable d)
{
    if ( c == formCommand )
    {
        Display display = Display.getDisplay(Projeto.app);
        display.setCurrent(FormCliente);
    }
}

}[/code]

existe algum outro componente semelhante ao List? Para que eu possa substitui-lo!

eu preciso listar registros na tela, mas também exibir um TextField, só que pelo jeito com o List não da né?
também é necessário conseguir capturar a string do item que a listagem ta apontando

se alguém souber por favor me indique!!!

[quote=vfmartins]existe algum outro componente semelhante ao List? Para que eu possa substitui-lo!

eu preciso listar registros na tela, mas também exibir um TextField, só que pelo jeito com o List não da né?
também é necessário conseguir capturar a string do item que a listagem ta apontando

se alguém souber por favor me indique!!!
[/quote]

Use então choicelist que é um item dentro do form.

http://www.google.com.br/search?hl=pt-BR&client=firefox-a&rls=org.mozilla:en-US:official&hs=NTH&ei=EjNjS92sIc6ztgedoZSmBg&sa=X&oi=spell&resnum=0&ct=result&cd=1&ved=0CAYQBSgA&q=choice+list+j2me&spell=1

O quanto conhece de orientação a objetos? acho melhor dar uma estudada melhor no que esta fazendo, pois esta muito confuso…

obrigado ricoldi, CHOICE.IMPLICIT aparentemente faz o que eu estou precisando, mas só uma dúvida: É possível apontar para determinado item da lista do choice? Ou seja, se eu digitar um valor num TextField é possível que ele aponte para o item semelhante no Choice?

Aguardo sugestões!!
obrigado

Não sei se entendi direito, mas o j2me não possui eventos quando esta no nivel de “forms” e “lists”, não tem como ser notificado “ao perder foco”, “ao tecla ser pressionada”, só por alguns botões e alguns itens, mas não em um textfield, tem que ver direitinho qual sua necessidade para saber contornar… Dê uma lida na documentação do textfield.

blz cara…

eu encontrei uma outra maneira de fazer isso… adicionei um botão (canvas) aí ele recarrega a tela filtrando pelo valor…

obrigado pela dica do Choice