[quote=daquinho]opa… já tenho código
o que eu fiz, foi…
pasta onde tem as telas, criei uma classe que extende AbstracttableModel e outra classe DaoPopulaJTable, que é os dados a serem exibidos na tabela, lembrando que os dados completos são compostos por 4 tabelas no banco, estou exibindo bem menos informações na tabela. Nela crio os nomes das colunas e populo um ArrayList que vai ser chamado para encher a classe TabelaModelo(extends AbstractTableModel).
estou usando NetBeans 6.9.1
essa classe vai ser usada em "tabela.setModel(tabelaModelo);
class TabelaModelo extends AbstractTableModel{
private String[] colunas = {"EMPRESA","NOME","SOBRENOME","TELEFONE","ENDEREÇO"};
private List<DaoPopulaJTable> dados;
private DaoPopulaJTable daoPopulaJTable = new DaoPopulaJTable();
public TabelaModelo() {
setDados(daoPopulaJTable.listar());
}
private void setDados(List<DaoPopulaJTable> dados) {
this.dados = dados;
}
private void setLinhas(List dados) {
this.dados = dados;
}
public int getRowCount() {
return dados.size();
}
public int getColumnCount() {
return colunas.length;
}
public Object getValueAt(int rowIndex, int columnIndex) {
// SQL usado para popular a lista
//select empresa.id, empresa.nomefantasia, contato.nome, telefone.telefonefixo1, telefone.radio, endereco.estado, endereco.municipio
DaoPopulaJTable linha = dados.get(rowIndex);
String valor = "";
switch(columnIndex){
case 1: valor = linha.getNomeFantasia();
break;
case 2: valor = linha.getNomeContato();
break;
case 3: valor = linha.getTelefone1();
break;
case 4: valor = linha.getRadio();
break;
case 5: valor = linha.getEstado();
break;
case 6: valor = linha.getMunicipio();
break;
}
return valor;
}
@Override
public String getColumnName(int column) {
return colunas[column];
}
}
e essa classe vai no banco buscar os dados para preencher a tabela. Nela eu pego o id da tabela empresa e não jogo na tabela para ser exibida, isso é apra depois poder ffazer o caminho inverso e resgatar todas as informações daquele registro selecionando a linha na tabela, to no caminho certo?
public class DaoPopulaJTable {
private long id_empresa;
private String nomeFantasia;
private String nomeContato;
private String telefone1;
private String radio;
private String estado;
private String municipio;
private Dao dao = new Dao();
private PreparedStatement preparedStatement;
private ResultSet resultSet;
public long getId_empresa() {
return id_empresa;
}
public void setId_empresa(long id_empresa) {
this.id_empresa = id_empresa;
}
public String getEstado() {
return estado;
}
public void setEstado(String estado) {
this.estado = estado;
}
public String getMunicipio() {
return municipio;
}
public void setMunicipio(String municipio) {
this.municipio = municipio;
}
public String getNomeContato() {
return nomeContato;
}
public void setNomeContato(String nomeContato) {
this.nomeContato = nomeContato;
}
public String getNomeFantasia() {
return nomeFantasia;
}
public void setNomeFantasia(String nomeFantasia) {
this.nomeFantasia = nomeFantasia;
}
public String getTelefone1() {
return telefone1;
}
public void setTelefone1(String telefone) {
this.telefone1 = telefone;
}
public String getRadio() {
return radio;
}
public void setRadio(String radio) {
this.radio = radio;
}
public List<DaoPopulaJTable> listar(){
List<DaoPopulaJTable> lista = new ArrayList();
DaoPopulaJTable dpjt;
String sql = "select empresa.id, empresa.nomefantasia, contato.nome, telefone.telefonefixo1, telefone.radio, endereco.estado, endereco.municipio"+
"from empresa, contato, telefone, endereco "+
"where empresa.id_contato=contato.id and empresa.id_telefone=telefone.id and empresa.id_endereco=endereco.id";
try {
preparedStatement = dao.getConexao().prepareStatement(sql);
resultSet = preparedStatement.executeQuery();
while(resultSet.next()){
dpjt = new DaoPopulaJTable();
dpjt.setId_empresa(resultSet.getLong(1));
dpjt.setNomeFantasia(resultSet.getString(2));
dpjt.setNomeContato(resultSet.getString(3));
dpjt.setTelefone1(resultSet.getString(4));
dpjt.setRadio(resultSet.getString(5));
dpjt.setEstado(resultSet.getString(6));
dpjt.setMunicipio(resultSet.getString(7));
lista.add(dpjt);
}
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null,ex.getStackTrace());
}
return lista;
}
}
a minha aplicação inicia, preenche os nomes das colunas da tabela mas não preenche as celulas.[/quote]
Daquinho,
Vamos ajeitar essa aplicação em camadas. Ela vai ficar mais inteligível.
Primeiro, crie o pacote Bean. As classes Bean serão aquelas que represetarão as entidades do banco de dados. Elas possuem Getters e Setters, bem como implementações mais detalhadas do toString(), equals(), dentre outros.
public class Empresa {
// Os atributos que você colocou na classe acima, só que em uma classe separada.
private long id_empresa;
private String nomeFantasia;
private String nomeContato;
private String telefone1;
private String radio;
private String estado;
private String municipio;
// Getters, setters e demais...
}
Beleza, feito isso, temos um objeto independente da sua entidade do Banco de Dados. Da sua maneira, há um acoplamento gigante entre a classe Bean e a classe de Persistência.
Agora sim faremos uma classe de Persistência própria, que será responsável por buscar dados referentes à entidade acima construída.
public class EmpresaDAO { // ao invés de DaoPopulaJTable, pois fica um nome mais genérico.
public List<DaoPopulaJTable> listar() throws SQLException { // as exceções serão tratadas nas camadas superiores, não diretamente aqui.
List<Empresa> lista = new ArrayList<Empresa>();
Empresa empresa;
String sql = "select empresa.id, empresa.nomefantasia, contato.nome, telefone.telefonefixo1, telefone.radio, endereco.estado, endereco.municipio"+
"from empresa, contato, telefone, endereco "+
"where empresa.id_contato=contato.id and empresa.id_telefone=telefone.id and empresa.id_endereco=endereco.id";
preparedStatement = dao.getConexao().prepareStatement(sql);
resultSet = preparedStatement.executeQuery();
while(resultSet.next()){
empresa = new Empresa();
empresa.setId_Empresa( resultSet.getLong("empresa.id") ); //busque pelo nome da coluna ao invés de índices, menos propício a erros.
lista.add(empresa);
}
return lista;
}
}
Agora, seu TableModel poderá ser tipado para uma entidade específica, e não para aquela classe que encapsulava tanto a entidade quanto métodos de acesso a dados.
public class EmpresaTableModel extends AbstractTableModel {
private List<Empresa> empresas;
public EmpresaTableModel(List<Empresa> empresas) {
this.empresas = empresas != null ? empresas : new ArrayList<Empresas>();
}
public Object getValueAt(int row, int col) {
Empresa empresa = empresas.get(row);
if (col == 0) return empresa.getId_Empresa();
if (col == 1) return empresa.getNome_Empresa();
//...
return "";
}
}
Tenta com seus objetos bem separadinhos, bonitinhos, e nos dê um reply!
Abraço