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

14 respostas
DadoBeer

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!

14 Respostas

AndreMendes
if(choiceGroup  == 1)

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

else if(choiceGroup  == 2)

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

Acho que isso deve funcionar …

P

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.

j0nny

Procure tbm por ItemCommandListener

DadoBeer

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…

DadoBeer

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!

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!

j0nny

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!

Se vc postar o código, poderemos ajudar…

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!

j0nny

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!

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

DadoBeer

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.

enrico.bo

Fala garoto!!!

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

Fernando_Generoso_da

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…

enrico.bo

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…

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

DadoBeer

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

Valeu…

Criado 22 de julho de 2010
Ultima resposta 26 de jul. de 2010
Respostas 14
Participantes 6