ArrayList para carregar dados JTable

boa tarde pessoal, estou com uma dúvida sobre como popular uma JTable com Dados do Mysql…

tenho uma classe ClienteDAO com o método de consulta…

[code][quote]public ArrayList retornaTodas() {
ArrayList pessoas = new ArrayList();
try {

		String sql = "select * from cliente";
		PreparedStatement stmt = conexao.prepareStatement(sql);
		ResultSet rs = stmt.executeQuery();
		
		

		while (rs.next()) {
			Cliente pessoa1 = new Cliente();
			pessoa1.setNome(rs.getString("nome"));
			pessoa1.setCpf(rs.getString("cpf"));
			pessoa1.setEndereco(rs.getString("endereco"));
			pessoa1.setNumero(rs.getString("numero"));
			pessoa1.setBairro(rs.getString("bairro"));
			pessoa1.setTelefone(rs.getString("telefone"));
			pessoa1.setEmail(rs.getString("email"));
			pessoas.add(pessoa1);
		}
		rs.close();
		stmt.close();
		return pessoas;
	} catch (Exception e) {
		// TODO: handle exception
	}
	return null;

}[/quote]

[/code]
o meu método para criar tabela…

[code][quote]public JTable criarTabela() {

	ArrayList dados = new ArrayList();  
	
	    String[] colunas = new String[] { "Estado", "Cidade" };  
	  
	    // Alimenta as linhas de dados  
	    dados.add(new String[] { "SP", "São Paulo" });  
	    dados.add(new String[] { "RJ", "Rio de Janeiro" });  
	    dados.add(new String[] { "RN", "Rio Grande do Norte" });  
	    dados.add(new String[] { "ES", "Espirito Santo" });  
	  
	    Tabela modelo = new Tabela(dados, colunas);  
	    JTable jtable = new JTable(modelo);  
	    jtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);  
	  
	    return jtable;  

}[/quote][/code]

gostaria de saber o seguinte, como devo usar o ArrayList para popular a tabela…

desde já agradeço…

Boa tarde eu utilizo o metodo assim no meu exemplo

[code]private void atualizarTabela() {

    try {

        dtmcliente.getDataVector().clear();// limpa a tabela
        List<Pessoa> lista_pessoa = new ArrayList();// lista dos objetos
        lista_pessoa = Sessao.getSessao().createQuery(pes).list();// aki é a pesquisa que popula meu list

        if (!lista_pessoa.isEmpty()) {// aki verifica se a list nao esta vazia
            for (Pessoa p : lista_pessoa) {// aki ele percorre minha list
                dtmcliente.addRow(new Object[]{p.getId(), p.getNome(), p.getTelefone(), p.getEndereco()});// adiciona na jtbale
            }
        }
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, "Erro ao atualizar tabela\n" + e.getMessage(), null, JOptionPane.ERROR_MESSAGE);
    }
}[/code]

So uma coisa esse exemplo acima é com defaulttablemodel se vc tiver sua propria tablemodel fica bem mais facil.

Crie um ClienteTableModel, mais detalhes ao lado do link em vermelho na minha assinatura.

boa noite, criei minha tabela assim:

[code]package classes;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.AbstractTableModel;

public class TabelaModelo extends AbstractTableModel {
private List linhas;
private String[] colunas = null;

// Métodos Geters
public String[] getColunas() {
	return colunas;
}

public List getLinhas() {
	return linhas;
}

// Métodos Seters
public void setColunas(String[] strings) {
	colunas = strings;
}

public void setLinhas(ArrayList list) {
	linhas = list;
}

// Construtores
public TabelaModelo() {

}

public TabelaModelo(ArrayList dados, String[] colunas) {
	setLinhas(dados);
	setColunas(colunas);
}

/**
 * Retorna o numero de colunas no modelo
 * 
 * @see javax.swing.table.TableModel#getColumnCount()
 */
public int getColumnCount() {
	return getColunas().length;
}

/**
 * Retorna o numero de linhas existentes no modelo
 * 
 * @see javax.swing.table.TableModel#getRowCount()
 */
public int getRowCount() {
	return getLinhas().size();
}

/**
 * Obtem o valor na linha e coluna
 * 
 * @see javax.swing.table.TableModel#getValueAt(int, int)
 */
public Object getValueAt(int rowIndex, int columnIndex) {
	// Obtem a linha, que é uma String []
	String[] linha = (String[]) getLinhas().get(rowIndex);
	// Retorna o objeto que esta na coluna
	return linha[columnIndex];
}

public JTable createJTable() {

	ArrayList dados = new ArrayList();

	String[] colunas = new String[] { "Estado", "Cidade" };

	// Alimenta as linhas de dados
	dados.add(new String[] { "SP", "São Paulo" });
	dados.add(new String[] { "RJ", "Rio de Janeiro" });
	dados.add(new String[] { "RN", "Rio Grande do Norte" });
	dados.add(new String[] { "ES", "Espirito Santo" });
	dados.add(new String[] { "ES", "Espirito Santo" });
	dados.add(new String[] { "ES", "Espirito Santo" });
	dados.add(new String[] { "ES", "Espirito Santo" });
	dados.add(new String[] { "ES", "Espirito Santo" });
	dados.add(new String[] { "ES", "Espirito Santo" });
	dados.add(new String[] { "ES", "Espirito Santo" });

	TabelaModelo modelo = new TabelaModelo(dados, colunas);
	JTable jtable = new JTable(modelo);
	jtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

	return jtable;

}

public void setValueAt(Object value, int row, int col) {
	// Obtem a linha, que é uma String []
	String[] linha = (String[]) getLinhas().get(row);
	// Altera o conteudo no indice da coluna passado
	linha[col] = (String) value;
	// dispara o evento de celula alterada
	fireTableCellUpdated(row, col);
}

public void addRow(String[] dadosLinha) {
	getLinhas().add(dadosLinha);
	// Informa a jtable de que houve linhas incluidas no modelo
	// COmo adicionamos no final, pegamos o tamanho total do modelo
	// menos 1 para obter a linha incluida.
	int linha = getLinhas().size() - 1;
	fireTableRowsInserted(linha, linha);
	return;
}

public void removeRow(int row) {
	getLinhas().remove(0);
	// informa a jtable que houve dados deletados passando a
	// linha reovida
	fireTableRowsDeleted(row, row);
}

/**
 * Remove a linha pelo valor da coluna informada
 * 
 * @param val
 * @param col
 * @return
 */
public boolean removeRow(String val, int col) {
	// obtem o iterator
	Iterator i = getLinhas().iterator();
	int linha = 0;
	// Faz um looping em cima das linhas
	while (i.hasNext()) {
		// Obtem as colunas da linha atual
		String[] linhaCorrente = (String[]) i.next();
		linha++;
		// compara o conteudo String da linha atual na coluna desejada
		// com o valor informado
		if (linhaCorrente[col].equals(val)) {
			getLinhas().remove(linha);
			// informa a jtable que houve dados deletados passando a
			// linha removida
			fireTableRowsDeleted(linha, linha);
			return true;
		}
	}
	// Nao encontrou nada
	return false;
}

}
[/code]

gostaria de saber como implemento essa parte do código pra carregar os dados com a Lista da minha classe ClienteDAO…

esse é o metodo da que monta minha tabela…

[code]public JTable createJTable() {

    ArrayList dados = new ArrayList();  

    String[] colunas = new String[] { "Estado", "Cidade" };  

    // Alimenta as linhas de dados  
    dados.add(new String[] { "SP", "São Paulo" });  
    dados.add(new String[] { "RJ", "Rio de Janeiro" });  
    dados.add(new String[] { "RN", "Rio Grande do Norte" });  
    dados.add(new String[] { "ES", "Espirito Santo" });  
    dados.add(new String[] { "ES", "Espirito Santo" });  
    dados.add(new String[] { "ES", "Espirito Santo" });  
    dados.add(new String[] { "ES", "Espirito Santo" });  
    dados.add(new String[] { "ES", "Espirito Santo" });  
    dados.add(new String[] { "ES", "Espirito Santo" });  
    dados.add(new String[] { "ES", "Espirito Santo" });  

    TabelaModelo modelo = new TabelaModelo(dados, colunas);  
    JTable jtable = new JTable(modelo);  
    jtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);  

    return jtable;  

}  [/code]

essa é minha classe ClienteDAO:

[code]
package banco;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import classes.Cliente;

public class ClienteDAO {

private Connection conexao;

public ClienteDAO() {
	this.conexao = new ConnectionFactory().getConnection();
}

public List<Cliente> retornaTodas() {
	List<Cliente> pessoas = new List<Cliente>();
	try {

		String sql = "select * from cliente";
		PreparedStatement stmt = conexao.prepareStatement(sql);
		ResultSet rs = stmt.executeQuery();
		
		

		while (rs.next()) {
			Cliente pessoa1 = new Cliente();
			pessoa1.setNome(rs.getString("nome"));
			pessoa1.setCpf(rs.getString("cpf"));
			pessoa1.setEndereco(rs.getString("endereco"));
			pessoa1.setNumero(rs.getString("numero"));
			pessoa1.setBairro(rs.getString("bairro"));
			pessoa1.setTelefone(rs.getString("telefone"));
			pessoa1.setEmail(rs.getString("email"));
			pessoas.add(pessoa1);
		}
		rs.close();
		stmt.close();
		return pessoas;
	} catch (Exception e) {
		// TODO: handle exception
	}
	return null;

}

public void insereBanco(Cliente pessoa) {

	String sql = "insert into pessoa (nome, cpf, bairro) values(?,?,?)";
	java.sql.PreparedStatement stmt;

	try {
		stmt = conexao.prepareStatement(sql);

		stmt.setString(1, pessoa.getNome());
		stmt.setString(2, pessoa.getCpf());
		stmt.setString(3, pessoa.getBairro());


		stmt.execute();

		conexao.close();
	} catch (SQLException e) {
		e.printStackTrace();
	}

}

}[/code]

Bom dia,

Consegui resolver o problema para popular minha JTable com dados do banco, ficou da seguinte forma:

[code]public class ClienteTabelaModelo extends AbstractTableModel {
private List clientes;
private List colunas;
private ClienteDAO dao;

// Construtores
public ClienteTabelaModelo() {

}

public ClienteTabelaModelo(ClienteDAO dao) throws SQLException {
	this.dao = dao;
	this.clientes = dao.retornaTodas();
	colunas = Arrays.asList("CPF", "Nome", "Telefone");
}

// Métodos Geters
public List<String> getColunas() {
	return colunas;
}

// Retorna o numero de colunas no modelo

public int getColumnCount() {
	return colunas.size();
}

// Retorna o numero de linhas existentes no modelo

public int getRowCount() {
	return clientes.size();
}

public String getColumnName(int i) {
	return colunas.get(i);
}

// Obtem o valor na linha e coluna

public Object getValueAt(int r, int c) {
	Cliente cliente = clientes.get(r);
	switch (c) {
	case 0:
		return cliente.getCpf();
	case 1:
		return cliente.getNome();
	case 2:
		return cliente.getTelefone();

	}
	return null;
}


//MÉTODOS PARA EDITAR TABELA
/*public void setValueAt(Object aValue, int r, int c) {
	Cliente cliente = clientes.get(r);

	switch (c) {
	case 0:
		cliente.setCpf((String) aValue);
	case 1:
		cliente.setNome((String) aValue);
	default:
		throw new IndexOutOfBoundsException("columnIndex out of bounds");
	}
}
@Override
public boolean isCellEditable(int r, int c){
	return true;
}*/

}[/code]

[code]public class ClienteDAO {

private Connection conexao;

public ClienteDAO() {
	this.conexao = new ConnectionFactory().getConnection();
}

public List<Cliente> retornaTodas() throws SQLException {
	List<Cliente> clientes = new ArrayList<Cliente>();
	String sql = "select * from cliente";
	try {

		
		PreparedStatement stmt = conexao.prepareStatement(sql);
		ResultSet rs = stmt.executeQuery();
		
		

		while (rs.next()) {
			Cliente cliente = new Cliente();
			
			cliente.setNome(rs.getString("nome"));
			cliente.setCpf(rs.getString("cpf"));
			cliente.setEndereco(rs.getString("endereco"));
			cliente.setNumero(rs.getString("numero"));
			cliente.setBairro(rs.getString("bairro"));
			cliente.setTelefone(rs.getString("telefone"));
			cliente.setEmail(rs.getString("email"));
			clientes.add(cliente);
		}
		rs.close();
		stmt.close();
		
	} catch (Error e) {
		throw new RuntimeErrorException(e);
	}
	return clientes;

}

public void insereBanco(Cliente pessoa) {

	String sql = "insert into cliente (nome, cpf, bairro, email, endereco, numero, telefone) values(?,?,?,?,?,?,?)";
	java.sql.PreparedStatement stmt;

	try {
		stmt = conexao.prepareStatement(sql);

		stmt.setString(1, pessoa.getNome());
		stmt.setString(2, pessoa.getCpf());
		stmt.setString(3, pessoa.getBairro());
		stmt.setString(4, pessoa.getEmail());
		stmt.setString(5, pessoa.getEndereco());
		stmt.setString(6, pessoa.getNumero());
		stmt.setString(7, pessoa.getTelefone());
		

		stmt.execute();

		conexao.close();
	} catch (SQLException e) {
		e.printStackTrace();
	}

}

public void atualiza(Cliente cliente){
	String sql = "update cliente set nome=?, " +
			"bairro=?, email=?, endereco=?, numero=?, telefone=? where cpf=?";
	
	try {
		PreparedStatement stmt = conexao.prepareStatement(sql);
		stmt.setString(1, cliente.getNome());
		stmt.setString(2, cliente.getBairro());
		stmt.setString(3, cliente.getEmail());
		stmt.setString(4, cliente.getEndereco());
		stmt.setString(5, cliente.getNumero());
		stmt.setString(6, cliente.getTelefone());
		stmt.setString(7, cliente.getCpf());
		//stmt.setInt(8, cliente.getId());
		stmt.execute();
		stmt.close();
	} catch (SQLException e) {
		throw new RuntimeException(e);
	}
}

public void excluirCliente(Cliente c){
	String sql = "delete from cliente where cpf=?";
	
	try {
		PreparedStatement stmt = conexao.prepareStatement(sql);
		stmt.setString(1, c.getCpf());
		
		stmt.execute();
		stmt.close();
	} catch (SQLException e) {
		throw new RuntimeException(e);
	}
}

}[/code]

E fiz um método para montar minha tabela, funcionou beleza…

[code]public void atualizaTabela() {
ClienteDAO dao = new ClienteDAO();
ClienteTabelaModelo tm = null;
try {
tm = new ClienteTabelaModelo(dao);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JTable t = new JTable™;

	scroll = new JScrollPane(t);
	scroll.setBounds(70, 305, 470, 100);
	scroll.setVisible(true);
	this.add(scroll);
}[/code]

Agora me apareceu outro problema, por exemplo se adiciono o registro na tabela chamo o Método atualizarTabela, mas o scroll não funciona correramente… se alguém souber como posso fazer me de uma ajuda.

Desde já agradeço…