Passar dados de uma Tela para a outra

10 respostas
A

Boa tarde Madrugada…
To com uma dúvida aqui é o seguinte.: Tenho uma tela de compras, e nessa tela eu tenho um TextField chamado peças, e do lado eu tenho um botão chamado Busca… quando o cara vai comprar ele clica nesse botão e abre uma tela de busca, onde ele realiza a busca e as peças aparecem uma JTable, ele clica na peça que desejar comprar na JTable e os dados vão para os textfilds desta tela de busca, nesta tela de busca tem um botão chamado Importa, onde após o usuário clicar neste botão os dados tem que passar dos textfields da tela de Busca para a tela de compras, a dúvida vem agora, como passar os dados dos textfields da tela de busca para a tela de compras, sem que a primeira tela, a de compra seja fechada após abrir a tela de busca??? ou seja após o cara selecionar os dados na tela de busca e lança-los para os textfilds da tela de busca, ele irá clicar no botão importar e os dados tem que passar dos textfilds da tela de busca para os textfields da tela de compras… como eu faço isso???

10 Respostas

L

Penso que a melhor solução não seria passar as informações diretamente de uma tela para a outra.

No cenário que você descreveu, me parece que as duas telas atuarão sobre algo como um “Pedido”.

Então, cada seção teria uma instância de uma classe Pedido, a tela de busca, atribuiria o produto ao Pedido e a tela de compras buscaria o produto deste e apresentaria seus atributos.

Abraços

A

luizSC:
Penso que a melhor solução não seria passar as informações diretamente de uma tela para a outra.

No cenário que você descreveu, me parece que as duas telas atuarão sobre algo como um “Pedido”.

Então, cada seção teria uma instância de uma classe Pedido, a tela de busca, atribuiria o produto ao Pedido e a tela de compras buscaria o produto deste e apresentaria seus atributos.

Abraços


Acho que vc entendeu errado LuizSC, a tela de compras se encaixaria melhor nesse tal “Pedido” que vc falou, onde na tela de compras eu tenho que buscar qual fornecedor está fornecendo, para isso eu tenho um botão chamado busca, que ao clicar nesse botão abre uma outra tela, mas a tela de compras permanece aberta, o usuário reliza a busca nesta tela de busca, e os dados aparecem num textfield, agora que quero saber como eu faço para passar os dados deste textfild da tela de busca para a tela de compras…

Abraço!!

D

Bom dia Anderson.

Creio eu que já dei uma dica aqui no GUJ parecida com o seu problema.

Dê uma olhada no link abaixo e vê se te serve.

http://www.guj.com.br/posts/list/218703.java

Um abraço.

L

isso é feito direto no banco !!!

A

discorpio:
Bom dia Anderson.

Creio eu que já dei uma dica aqui no GUJ parecida com o seu problema.

Dê uma olhada no link abaixo e vê se te serve.

http://www.guj.com.br/posts/list/218703.java

Um abraço.

discorpion,minha dúvida é um pouco diferente, tenho um tela de compras nela tenho um textfied chamado fornecedor, e um outro chamado peças, ao lado do textfild fornecedor eu tenho um botão chamado buscar, e ao lado do textfild peça tbm tem um botão chamado buscar, quando o cara clicar no botão para buscar o fornecedor irá abrir uma outra tela para buscar o fornecedor, o usuário realiza a busca e lança os dados para os textfild desta tela e busca e clica num botão chamado importa, quando ele fazer isso esses dados tem que passar dos textfilds da tela de busca para a tela de compras e tem que aparecer em tempo de execução, este mesmo processo tem que ocorre para o textfild de peças… Entendeu??

N

Anderson, você pode fazer o seguinte:

Eu tenho um botao que chama a tela de produtos:
pesquisarProdutosButton.addActionListener( new ActionListener() {
   
   public void actionPerformed(ActionEvent e)
   {
      WinPesquisarProdutos pesquisarProdutos = new WinPesquisarProdutos();
      pesquisarProdutos.showDialog();

      Produto produtoSelecionado = pesquisarProdutos.requisitarProduto();
   }
});
O que o código acima tá fazendo? Eu crio uma tela chamada WinPesquisarProdutos, que é a sua tela de pesquisa. Lá, você faz os seus controles para a pesquisa, e adiciona também uma variável e um método, onde a variável representa o produto selecionado e o método você usa para buscar esse produto:
public class WinPesquisarProdutos extends JDialog
{
   private Produto produto;
   public Produto requisitarProduto()
   {
      return produto;
   }  

   public WinPesquisarProdutos()
   {
      // Todo o código para montar a tela...
      importarProdutoButton = new JButton("Importar");
      importarProdutoButton.addActionListener( new ActionListener() {

         public void actionPerformed(ActionEvent e)
         {
            produto = modeloDaTabela.requisitarRegistro(tabela.getSelectedRow());
            dispose();
         }
      });
   }
}

Beleza... Eu tenho o método que retorna o produto que selecionou. Mas como ele escolhe o produto? Você pega o seu registro selecionado do modelo da sua tabela e seta a variável produto com ele. Ou seja, a variável produto, toda vez que você clicar no botão "Importar", vai setá-la com o valor do novo produto selecionado e fechar a tela, logo em seguida.

Lá na chamada da Tela, você mostra a tela e, após clicar no botão "Importar", é só chamar o método requisitarProduto, que você tem o produto que selecionou lá!

Era isso?
Abraços!

D

Bom dia Anderson

Anderson S.:

discorpion,minha dúvida é um pouco diferente, tenho um tela de compras nela tenho um textfied chamado fornecedor, e um outro chamado peças, ao lado do textfild fornecedor eu tenho um botão chamado buscar, e ao lado do textfild peça tbm tem um botão chamado buscar, quando o cara clicar no botão para buscar o fornecedor irá abrir uma outra tela para buscar o fornecedor, o usuário realiza a busca e lança os dados para os textfild desta tela e busca e clica num botão chamado importa, quando ele fazer isso esses dados tem que passar dos textfilds da tela de busca para a tela de compras e tem que aparecer em tempo de execução, este mesmo processo tem que ocorre para o textfild de peças… Entendeu??

Sim, eu entendi.

O que voce deve fazer é criar uma classe bean para Fornecedores e outra para Peças.

Mais o que é um Bean :?:

Traduzindo Bean para o portugues que é “Feijão”, ora o que um caroço de feijão tem, nutrientes, ferro, proteínas e etc. Já no java, o Bean vai ser um objeto que carrega uma linha de registro de uma tabela, com seus métodos getters e setters, contendo todos os seus dados. Portando ele tem que ter a estrutura de registro da tabela, desta forma:

....
   public class FornecedorBean {
     
      private Integer id_fornecedor;
      private String nome_fornecedor, cnpj;

      public Integer getId_fonecedor(){
           return id_fornecedor;
      }

      public void setId_fornecedor(Integer id_fornecedor){
          this.id_fornecedor = id_fornecedor;
      }

      public String getNome_fornecedor(){
          return nome_fornecedor;

      public void setNome_fornecedor(String nome_fornecedor){
          this.nome_fornecedor = nome_fornecedor;
      }

      public String getCnpj(){
          return cnpj;
      }

      public void setCnpj(String cnpj){
          this.cnpj = cnpj;
      }

      ....
}

Faço o mesmo para a tabela de Peças.

No momento em que voce estiver na tela de busca do Fornecedor, assim que a busca retornar o registro, no mesmo momento em que voce popula os JTextFields desta tela, voce instancia a classe FornecedorBean e popule-o também que os seus métodos setters, fazendo a mesma coisa para a tela de busca das Peças, Depois é só passar estes Beans (Fornecedores e Peças) para a tela de Compras, onde voce vai popular os JTextFields da tela de Compras com os métodos getters de cada um Bean.

Outra dica, para evitar o famoso “NullPointer” e também ter que ficar instanciando os Beans a toda hora, criando assim várias referências de vários beans, crie um atributo privado do tipo FornecedorBean dentro da tela de busca do Fornecedor e encapsule com um método getter assim:

....
   private FornecedorBean bean = null;
   ....
   public FornecedorBean getBean(){
       if (bean == null) bean = new FornecedorBean();
       return bean;
   }

Repare que dentro da própria tela de busca do fornecedor, voce pode usar este método getter recursivo, para popular o seu bean, assim:

getBean().setId_fornecedor(7);
    getBean().setNome_fornecedor("Wolksvagen");
    getBean().setCnpj("74747474747447");

Lá na tela de compras, quando voce referenciar a este bean, poderá fazê-lo desta forma:

TelaBuscaFornecedor buscaforn = new TelaBuscaFornedor();
   buscaforn.setVisible(true);  // Mostra a tela de busca
   // Após apanhar o fornecedor na tela de busca e popular o bean;
   // Supondo que o JTextField nomefornecedor já esteja instanciado.
   nomefornecedor.setText(buscaforn.getBean().getNome_fornecedor());

Detalhe, o mesmo procedimento para tela de busca das Peças deve ser adotado.

Cappichi

A

Onde eu crio o Bean???
E quando eu chamar a tela de buscaFornecedor eu tenho que passar o bean como parametro para ela??
como faz para voltar os dados para a tela de compras???
ficou meio vago :XD:

V

http://www.guj.com.br/posts/list/55710.java#292687

N
Anderson S.:
Onde eu crio o Bean???? E quando eu chamar a tela de buscaFornecedor eu tenho que passar o bean como parametro para ela?? como faz para voltar os dados para a tela de compras???? ficou meio vago :XD:

Anderson, conhece a arquitetura MVC?

1. Na camada Model, você pode criar um package lá chamado "Bean" ou "POJO". É lá onde vão as suas classes que representam entidades de uma base de dados, como no caso as classes Bean ou POJO.
package meuprojeto.model.Bean;

public class Fornecedor
{
   private int codigo;
   private String nome;
   private String CNPJ;
  
   // Getters e Setters...
   // Pode sobrescrever o equals, que é uma prática legal quando quer fazer comparações mais detalhadas.
  // Pode também criar os contrutores pra classe Bean aqui.
}

Assim, teremos uma classe da tabela Fornecedor, na sua base de dados.

2. Não, você não precisa passar nenhum Bean para a sua tela de busca de fornecedores. Lá dentro, como disse no meu post anterior, você pode criar um atributo privado Fornecedor, juntamente com um método para requisitar esse objeto, quando necessitar.

public class WinBuscarFornecedor extends JDialog
{
   private Produto produto;  
   public Produto requisitarProduto()  
   {  
      return produto;     
   } 
}
Quando clicar no botão importar, você preenche esse registro.
public class WinBuscarFornecedor extends JDialog
{
   private Fornecedor fornecedor;  
   public Produto requisitarFornecedor()  
   {  
      return fornecedor;     
   } 

   public WinBuscarFornecedor()
   {
      JButton importarFornecedorButton = new JButton("Importar");
      importarFornecedorButton.addActionListener( new ActionListener() {
      
         public void actionPerformed(ActionEvent e)
         {
            fornecedor = new Fornecedor();
            fornecedor.setCodigo( 1 );
            fornecedor.setNome( "Zé das Couves" );
            fornecedor.setCNPJ( "1111.2222.3333/0001" );
         }
   }
}
E voilà! Não tem erro! Quando você for fazer o uso disso:
WinPesquisarFornecedor pesquisarFornecedor = new WinPesquisarFornecedor();
pesquisarFornecedor.showDialog();   // Crio meu objeto da tela de consulta, e mostro-o ao usuário.

//Quando fechar o formulário...
Fornecedor fornecedorSelecionado = pesquisarFornecedor.requisitarFornecedor();

Simples assim!

Criado 3 de outubro de 2010
Ultima resposta 6 de out. de 2010
Respostas 10
Participantes 6