[Resolvido] Alterar formulário em tempo de execução

Fala ae pessoal!

Preciso alterar um formulário em tempo de execução da seguinte forma: tenho um choicegroup e dependendo da escolha do usuário, a aplicação exibe 1 textfield ou outro, mas não tenho ideia de como fazer.

Obrigado pela ajuda!

if(choiceGroup  == 1)

    jTextField1.setVisible(true);
    jTextField2.setVisible(false);

else if(choiceGroup  == 2)

    jTextField1.setVisible(false);
    jTextField2.setVisible(true);

Acho que isso deve funcionar …

Deve sim, em J2SE !

Caraca, o cara parace que tem ejaculação precoce !
Não olha onde posta e já saia escrevendo…

Respondendo a “questã” do DadoBeer:

Olhe no javadoc da classe Form e verá que existe um método chamado delete.

Procure tbm por ItemCommandListener

Obrigado pelas ajudas!

Dei uma lida sobre o delete do form, mas ele pede um parâmetro “(int itemNum)” do item do formulário e não estou conseguindo pegar os códigos das TextFields. Alguém tem uma luz?

Mais uma vez obrigado…

Consegui pegar os índices dos TextFields. Na verdade não estou conseguindo fazer o if nas escolhas do ChoiceGroup. Estou usando:

if (ChoiceGroup.getSelectedIndex() == 1)
{
formulario.delete(2);

}

Essa parte do ItemCommandListener também não consegui localizar na documentação.

Agradeço a ajuda de todos. Valeu!

Evolui na questão do ItemCommandListener, mas não estou conseguindo passar uma ação quando o usuário escolhe outra opção no ChoiceGroup, ou seja, mudou o item no controle, mas a ação não é disparada. Fiz um teste com List do tipo Implicit e consegui disparar uma ação, mas com o ChoiceGroup não estou conseguindo. Alguém pode me ajudar ou tem um exemplo?!

Desculpe minha ignorância, mas tenho evoluído muito com a ajuda de vocês. Obrigado!

[quote=DadoBeer]Evolui na questão do ItemCommandListener, mas não estou conseguindo passar uma ação quando o usuário escolhe outra opção no ChoiceGroup, ou seja, mudou o item no controle, mas a ação não é disparada. Fiz um teste com List do tipo Implicit e consegui disparar uma ação, mas com o ChoiceGroup não estou conseguindo. Alguém pode me ajudar ou tem um exemplo?!

Desculpe minha ignorância, mas tenho evoluído muito com a ajuda de vocês. Obrigado![/quote]

Se vc postar o código, poderemos ajudar…

O código que estou testando é esse:

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class Teste extends MIDlet implements CommandListener, ItemCommandListener
{
    private Display display;
    private Command cmdSair;
    private TextField tfNome, tfFone, tfEmail;
    private Form frmTeste;
    private ChoiceGroup cgContato;

    public void startApp()
    {
        display = Display.getDisplay(this);
        frmTeste = new Form("Teste - ChoiceGroup");

        cmdSair = new Command("Sair", Command.EXIT, 1);
        tfNome = new TextField("Nome:", "", 20, TextField.ANY);
        tfFone = new TextField("Fone:", "", 20, TextField.NUMERIC);
        tfEmail = new TextField("E-mail:", "", 20, TextField.EMAILADDR);
        cgContato = new ChoiceGroup("Contato:", ChoiceGroup.EXCLUSIVE, new String[] {"Telefone", "E-mail"}, null);

        frmTeste.addCommand(cmSair);
        frmTeste.append(tfNome);
        frmTeste.append(cgContato);
        frmTeste.append(tfFone);

        cgContato.setItemCommandListener(this);
        frmTeste.setCommandListener(this);
        display.setCurrent(frmTeste);
    }

    public void Contato()
    {
        if (cgContato.isSelected(1))
            frmTeste.delete(3);
            frmTeste.append(tfEmail);
        else if (cgContato.isSelected(2))
            frmTeste.delete(3);
            frmTeste.append(tfFone);
    }

    public void pauseApp() {}

    public void destroyApp(boolean unconditional) {}

    public void commandAction(Command c, Item item)
    {
        if (item == cgContato)
            Contato();
    }

    public void commandAction(Command c, Displayable d)
    {
        if (c == cmdSair)
        {
            destroyApp(true);
            notifyDestroyed();
        }
    }
}

A ideia é quando o usuário clicar em Telefone apague a TextField E-mail e apareça a Telefone e quando clicar em E-mail apague a Telefone e apareça a E-mail. Obrigado pela ajuda!

[quote=DadoBeer]O código que estou testando é esse:

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class Teste extends MIDlet implements CommandListener, ItemCommandListener
{
    private Display display;
    private Command cmdSair;
    private TextField tfNome, tfFone, tfEmail;
    private Form frmTeste;
    private ChoiceGroup cgContato;

    public void startApp()
    {
        display = Display.getDisplay(this);
        frmTeste = new Form("Teste - ChoiceGroup");

        cmdSair = new Command("Sair", Command.EXIT, 1);
        tfNome = new TextField("Nome:", "", 20, TextField.ANY);
        tfFone = new TextField("Fone:", "", 20, TextField.NUMERIC);
        tfEmail = new TextField("E-mail:", "", 20, TextField.EMAILADDR);
        cgContato = new ChoiceGroup("Contato:", ChoiceGroup.EXCLUSIVE, new String[] {"Telefone", "E-mail"}, null);

        frmTeste.addCommand(cmSair);
        frmTeste.append(tfNome);
        frmTeste.append(cgContato);
        frmTeste.append(tfFone);

        cgContato.setItemCommandListener(this);
        frmTeste.setCommandListener(this);
        display.setCurrent(frmTeste);
    }

    public void Contato()
    {
        if (cgContato.isSelected(1))
            frmTeste.delete(3);
            frmTeste.append(tfEmail);
        else if (cgContato.isSelected(2))
            frmTeste.delete(3);
            frmTeste.append(tfFone);
    }

    public void pauseApp() {}

    public void destroyApp(boolean unconditional) {}

    public void commandAction(Command c, Item item)
    {
        if (item == cgContato)
            Contato();
    }

    public void commandAction(Command c, Displayable d)
    {
        if (c == cmdSair)
        {
            destroyApp(true);
            notifyDestroyed();
        }
    }
}

A ideia é quando o usuário clicar em Telefone apague a TextField E-mail e apareça a Telefone e quando clicar em E-mail apague a Telefone e apareça a E-mail. Obrigado pela ajuda![/quote]

No método Contato(), seus índices começam em 1 mesmo?
Pq em java sempre se começa em 0 (zero).

Alterei pra 0 e 1, e mesmo assim continua não funcionando. Parece que ele não executa o Contato() dentro do commandAction. Não sei se estou passando parâmetro errado ou vacilando em algum detalhe.

Fala garoto!!!

Da uma estudada no código em anexo.
Abraços
Boa sorte!

Porque vc não utiliza a lógicaa inversa?? um mesmo TextField para as duas constraints…aí dependendo da tua escolha, tu faz um setLabel e um setConstraint de acordo com a escolha…
é uma idéia…

[quote=Fernando Generoso da Rosa]Porque vc não utiliza a lógicaa inversa?? um mesmo TextField para as duas constraints…aí dependendo da tua escolha, tu faz um setLabel e um setConstraint de acordo com a escolha…
é uma idéia…[/quote]

É oq postei em anexo para ele dar uma olhada -.-’

Obrigado a todos pela ajuda, dicas e caminhos para estudar!
Em especial ao Enrico pelo código e pela luz.

Valeu…