Dúvida sobre JTextField e JButton

4 respostas
S

Olá pessoal, estou há alguns dias batendo a cabeça sobre como resolver um problema simples, mas que tá bem dificil! rs

Estou fazendo uma GUI simples de cadastro de usuário, porém estou travado quando preciso transportar dados de uma janela, para outra.

Em outras palavras, quando eu digito os dados para cadastro(como nome, login e senha) e aperto ok, o programa deve mostrar na janela seguinte (um pop up) a confirmaçao dos dados cadastrados.

O Problema é que não estou conseguindo fazer isto, ja tentei de quase tudo, mas nao consigo!

EDIT: As Classes em questão que estou falando, são as Cadastra e ConfirmaDados!

Segue abaixo o código (esta meio desorganizado, pq já mexi inúmeras vezes)

package Frame;

import java.applet.Applet;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.event.DocumentListener;
import javax.swing.text.*;

public class Frame extends JFrame{

   // private JFrame frame = new JFrame("Programa 1");
    private JLabel label = new JLabel("Faça o Login:");
    private JLabel login = new JLabel("Login:");
    private JLabel senha = new JLabel("Senha:");
    private JPanel panel = new JPanel();

    public Frame(){

        super("Programa de Cadastro"); //ativa o construtor da classe pai

        setLayout(new FlowLayout()); // set frame layout

        TextField textoLogin = new TextField();
        TextField textoSenha = new TextField();
        textoLogin.setColumns(15);
        textoSenha.setColumns(15);

        JButton botaoOk = new JButton("OK");
        JButton botaoCadastra = new JButton("Cadastrar");

        setVisible(true);
        setSize(640, 480);
        setLocation(300, 300);
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        add(panel);
        panel.add(label);
        panel.add(login);
        panel.add(textoLogin);
        panel.add(senha);
        panel.add(textoSenha);
        panel.add(botaoOk);
        panel.add(botaoCadastra);

        Cadastra cadastra = new Cadastra();

        botaoCadastra.addActionListener(cadastra);
    }

}

class Cadastra implements ActionListener{

    Cadastra(){

    }

    public void actionPerformed(ActionEvent ae) {

        String texto = null;

        JFrame frame = new JFrame("Novo Cadastro");
        JLabel label = new JLabel("Preencha os seguintes campos:\n");
        JPanel panel = new JPanel();

        JLabel nome = new JLabel("Nome:");
        JLabel login = new JLabel("Login:");
        JLabel senha = new JLabel("Senha");

        JButton botaoOk = new JButton("OK");

        JTextField textoNome = new JTextField();
        TextField textoLogin = new TextField();
        TextField textoSenha = new TextField();

        textoNome.setColumns(15);
        textoLogin.setColumns(15);
        textoSenha.setColumns(15);

        frame.setVisible(true);
        frame.setSize(250, 150);
        frame.setResizable(false);

        frame.add(panel);
        panel.add(label);
        panel.add(nome);
        panel.add(textoNome);
        panel.add(login);
        panel.add(textoLogin);
        panel.add(senha);
        panel.add(textoSenha);
        panel.add(botaoOk);

        ConfirmaDados confirma = new ConfirmaDados();

        textoNome.addActionListener(confirma);
        botaoOk.addActionListener(confirma);

    }
}

class ConfirmaDados implements ActionListener{

    String nome = null;

    public void setNome(String nome ){ this.nome = nome; }
    public void actionPerformed(ActionEvent ae) {

        
        JFrame frame = new JFrame("Dados cadastrados!");
        JPanel panel = new JPanel();


        JLabel label = new JLabel("Nome:" + ae.getActionCommand());

        frame.setVisible(true);
        frame.setSize(150, 150);

        frame.add(panel);
        panel.add(label);
    }
    

}

4 Respostas

R

cria um objeto Bean com os dados do cadastro e depois passa esse objeto como parâmetro pra janela que vai se abrir e resgata os dados…

S

Eu nunca ouvi falar nesse objeto Bean… vc teria algum exemplo ou site que explica sobre ele?

R

ops
Bean vem de Java Beans e é um padrão de classe usado em JSP mas usualmente usam a notação pra classes encapsuladas do java que armazenam os dados do seu projeto ( enquanto classes DAO por exemplo tem outras funções )
um exemplo tipico:

public class Puppy 
{
  private String color;
  private int age;

  public String getColor()
  {
   return color;
  }

  public void setColor(String color)
  {
   this.color = color;
  }

  public int getAge()
  {
   return age;
  }

  public void setAge(int age)
  {
   this.age = age;
  }
}

ou seja, vc joga o login e senha por exemplo numa classe desta e pode trabalhar com ela...
Só que ta meio zoado isso ae neh... não é legal criar campo dentro de uma classe com ActionListener
O ideal seria vc colocar seu frame "Novo cadastro" em outro lugar e seu actionPerformed apenas criar ele

Vou dar uma ideia: no seu frame principal, o primeiro, cria uma classe interna que possui um listener e ele invoca uma outra classe que possui o seu frame "Novo cadastro" se o botão for pressionado...
No frame Novo cadastro vc faz a mesma coisa e ao clicar no OK vc pode chamar uma dialog interna mesmo ja que é soh pra confirmar os dados... ela teria acesso às variaveis globais da sua classe "Novo Cadastro" e consequentemente ao texto dos campos...

Se for trabalhar com Bean do jeito que ta ae da trabalho pq ele deveria ser uma variavel global da sua tela de cadastro e o actionPerformed ser um método que cria a classe Bean, armazena os valores, guarda na variavel global e cria uma dialog de confirmação passando o Bean como parametro...

Mas se vc quer continuar no seu esquema ae,eu nao recomendo da pra fazer umas gambiarras passando os campos como parametros...

public class Cadastra implements.... {  

        // seu codigo

       botaoOk.addActionListener( new ConfirmaDados( textoNome, textoLogin, textoSenha ) );      
  
    }  
}

// e no confirma
class ConfirmaDados implements ActionListener{  

JTextField nome;
JTextField login;
JTextField senha;

    public ConfirmaDados( JTextField nome, JTextField login, JTextField senha ) {
    {
    this.nome = nome;
    this.login  = login;
    this.senha = senha;
    }
    
    public void actionPerformed(ActionEvent ae) {  
          
        JFrame frame = new JFrame("Dados cadastrados!");  
        JPanel panel = new JPanel();  
  
        JLabel label = new JLabel("Nome:" + nome.getText() );  
        JLabel label = new JLabel("Login:" + login.getText() );  
        JLabel label = new JLabel("Senha:" + senha.getText() );  
  
        frame.setVisible(true);  
        frame.setSize(150, 150);  
  
        frame.add(panel);  
        panel.add(label);  
    }   
}

fiz na unha direto aki mesmo entao se tiver algo errado ae vc ja ajeita

S

Entendi perfeitamente o que vc falou, vou tentar dar um re-estruturada no programa agora, conforme tiver mais dúvidas, eu posto aqui! :slight_smile:

quanto a gambiarra, funcionou direitinho! rs

Criado 20 de janeiro de 2011
Ultima resposta 21 de jan. de 2011
Respostas 4
Participantes 2