Transferir dados do JTable para formulário

3 respostas
victorhugo.sfs

Olá pessoal estou com uma dúvida, como eu faço para transferir os dados de um JTable para um formulário?
Tipo eu criei uma classe que contém um formulário de cadastro de clientes e nele contém um botão de procurar que quando ser clicado var ser aberto outra classe contendo um JTable com os dados dos clientes inserido no banco, eu queria que quando a pessoa desse um duplo clique sobre o cliente desejado, seria transferido os dados para o formulário, tem como fazer isso?

Segue o código de como eu criei o JTable com os dados:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
/**
 *
 * @author Victor Hugo
 */
public class ProcuraClientes extends JFrame {
    
    BaseDadosClientes bdc =new BaseDadosClientes();
    
    JTable tabelaClientes;
    DefaultTableModel modelo =new DefaultTableModel();
    
    JScrollPane rolagem =new JScrollPane();
    
    JButton btnOk =new JButton("Ok");
    JButton btnCancelar =new JButton("Cancelar");
    
    JPanel panel =new JPanel();
    JPanel panelButton =new JPanel();
    
    ProcuraClientes() {
       montaProcuraClientes(); 
    }
    
    void montaProcuraClientes() {
        setDefaultLookAndFeelDecorated(true);
        setSize(350, 150);
        setTitle("Procura Clientes");
        setLocation(200, 200);
        
        panelButton.setLayout(new FlowLayout());
        panelButton.setSize(200, 200);
        
        modelo.addColumn("Código");
        modelo.addColumn("Nome");
        
        
        try {
            
            String sql = "Select * From clientes";
            
            bdc.stmt = bdc.conecta().createStatement();
            bdc.rs = bdc.stmt.executeQuery(sql);
            
            
            while(bdc.rs.next()) {
          modelo.addRow(new Object[]{String.valueOf(bdc.rs.getInt("codigo")),(bdc.rs.getString("nome"))});
            }
        }
        catch(Exception e) {
            System.out.println(e.getMessage());
        }
     
        tabelaClientes =new JTable(modelo);
        
        rolagem.setViewportView(tabelaClientes);
        panel.add(rolagem);
        
        btnOk.setOpaque(true);
        btnOk.setBackground(Color.lightGray);
        btnOk.setForeground(Color.BLACK);
        btnOk.setBorder(BorderFactory.createLineBorder(Color.white));
        panelButton.add(btnOk);
        
        btnCancelar.setOpaque(true);
        btnCancelar.setBackground(Color.lightGray);
        btnCancelar.setForeground(Color.black);
        btnCancelar.setBorder(BorderFactory.createLineBorder(Color.white));
        panelButton.add(btnCancelar);
        
        
        getContentPane().add(panel);
        getContentPane().add(panelButton, BorderLayout.SOUTH);
        setVisible(true);
       pack();
       
    }
    
    public static void main(String[] args) {
        new ProcuraClientes();
    }
   
}

Quem poder ajudar desde já agradeço.

3 Respostas

ViniGodoy

Comece não usando o DefaultTableModel…

Entender como a JTable funciona é meio que essencial para utiliza-la direito.
http://www.informit.com/articles/article.aspx?p=332278
http://www.informit.com/articles/article.aspx?p=333472

R

Quais são os problemas de se usar DefaultTableModel?

ViniGodoy
  1. Duplica os dados;
  2. Ele não trabalha com as classes de negócio;
  3. Mistura lógica de negócio nas classes de interface gráfica;
  4. Torna as classes de interface gráfica mais complexas;
  5. Deixa o código menos encapsulado e mais sujeito a erros;
  6. É mais difícil.

No caso de um TableModel próprio, vc simplesmente pegaria o cliente que está na linha da tabela (sim, ele seria um objeto da sua classe Cliente) e enviaria ele como parâmetro para o próximo formulário.

Aliás, eu não me canso de dar essa dica por aqui. Você pode até ver um exemplo de implementação aqui:
http://www.guj.com.br/posts/list/98452.java#530523

Criado 2 de agosto de 2008
Ultima resposta 2 de ago. de 2008
Respostas 3
Participantes 3