ArrayList para carregar dados JTable

4 respostas
F

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...

[quote]public ArrayList retornaTodas() {
		ArrayList<Cliente> pessoas = new ArrayList<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;

	}[/quote]
o meu método para criar tabela...
[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]

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

desde já agradeço....

4 Respostas

W

Boa tarde eu utilizo o metodo assim no meu exemplo

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);
        }
    }

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

V

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

F

boa noite, criei minha tabela assim:

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<Cliente> 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;
	}

}

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...

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;  
  
    }
essa é minha classe ClienteDAO:
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();
		}

	}

}
F

Bom dia,

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

public class ClienteTabelaModelo extends AbstractTableModel {
	private List<Cliente> clientes;
	private List<String> 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;
	}*/

}
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);
		}
	}

	
}

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

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(tm);

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

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....

Criado 3 de março de 2013
Ultima resposta 5 de mar. de 2013
Respostas 4
Participantes 3