Exemplo de TableModel

Ops! Faltou o método getRowCount:

@Override
public int getRowCount() {
    return getValues().size();
}

Abraços!

Dê uma olhada no ObjectTableModel do projeto Towel. Ele usa reflexão para identificar o local e tipo dos objetos:

Obrigado, ViniGodoy!

Post muito bom!! :smiley:

Fiz o meu TableModel baseado nesse do Eric Yuzo. Impressionante como facilita a vida!

o.O

Salvou minha vida em 2013!

E como disse o ViniGodoy:
----> Morte ao DefaultTableModel! \o/

Aê Vini, isso se aplica ao DefaultListModel tbm, certo???

Uma dúvida, se eu fizer isso: jTable.setValueAt(“bla bla bla”, 0, 1); ou jTable.getValueAt(0, 1);
eu vou chamar os métodos setValueAt e getValueAt do TableModel que implementei?

Eu tenho uma pergunta… eu Posso criar uma Interface tablemodel exemplo…

configurando toda a table model e etc… e depois que eu for configurar uma classe para salvar os dados em uma table.

eu extender para essa interface criada?

Eric Yuzo,
Eu usei o teu exemplo de TableModel, antes mesmo de tentar o DefaultTableModel, e é bem simples mesmo. Mas eu to com um problema, como que eu posso alterar a largura de cada coluna?

[quote=gpaschoaletto]Eric Yuzo,
Eu usei o teu exemplo de TableModel, antes mesmo de tentar o DefaultTableModel, e é bem simples mesmo. Mas eu to com um problema, como que eu posso alterar a largura de cada coluna?[/quote]

Isso não tem a ver com o TableModel, que é o modelo de onde vem os dados da tabela, e sim, com o modelo das colunas. Você teria que fazer algo como:

table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); table.getColumnModel().getColumn(0).setMinWidth(100);

Foi, valeu!

PS: pelo menos umas 10 respostas suas me ajudaram hoje xD

[quote=gpaschoaletto]Foi, valeu!

PS: pelo menos umas 10 respostas suas me ajudaram hoje xD[/quote]

:wink:

Olá Vini, uma dúvida, depois que fizer o meu table model, para preencher com os dados do banco é o mesmo do Jtable, tipo do netbeans?

O TableModel é a classe que explica para o JTable quais dados devem ser preenchidos.

Vini desculpe minha ignorância, mas não entendi esse negócio ainda não, estou quebrando a cabeça e não entendo, se importaria em expor um ex pequeno se baseando numa conexão, vou colocar a minha conexão abaixo pra você ver como faço, claro que tem mais formas de conexão, mas essa a que eu me acho mais fácil e sou muito leigo ainda mas gostaria muito de implementar o AbstractTableModel.

Minha conexão:

package utilitarios;
import java.sql.*;
import javax.swing.*;

public class conexao
{
          final private String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
          final private String url = "jdbc:odbc:EstoqueNetbeans";
          final private String usuario = "";
          final private String senha = "";
          /*String driver = "org.postgresql.Driver";
          String url = "jdbc:postgresql://localhost:5432/estoque"; 
          String usuario = "postgres"; 
          String senha   = "1203";*/ 
          private Connection conexao;
          public Statement statement;
          public ResultSet resultset;
              
          public boolean conecta()
              {
                 boolean result = true;                
                 try    
                 {             
                    Class.forName(driver);
                    conexao = DriverManager.getConnection(url, usuario, senha);
                    
                 }
                 catch(ClassNotFoundException Driver) 
                 {
                    JOptionPane.showMessageDialog(null,"Driver não localizado: "+Driver);
                    result = false;
                 }
                 catch(SQLException Fonte) 
                {
                    JOptionPane.showMessageDialog(null,"Deu erro na conexão "+
                            "com a fonte de dados: "+Fonte);
                    result = false;
                }
                 return result;
             }
          public void desconecta()
          {
              boolean result = true;
              try
              {
                  conexao.close();
                  JOptionPane.showMessageDialog(null,"Banco Fechado");
              }
              catch(SQLException fecha)
              {
                  JOptionPane.showMessageDialog(null,"Não foi pssível"+
                          "fechar o banco de dados:"+fecha);
              }
          }
          
          public void executeSQL(String sql)
          {
              try
              {
                  statement = conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
				     ResultSet.CONCUR_READ_ONLY);
                  resultset =statement.executeQuery(sql);
              }
              catch(SQLException sqlex)
              {
                  JOptionPane.showMessageDialog(null,"Não foi possível"+
                          "executar o comando sql,"+sqlex+", o sql passado foi"+sql);
              }
          }    

}
    

Onde Chamo a conexão:

conexao con_produto;

        con_produto = new conexao();
        con_produto.conecta();

São coisas diferentes. Uma classe de banco de dados tem o papel de ler os dados do banco e gerar uma lista de objetos de algum tipo. Por exemplo, você poderia criar uma classe chamada ClienteDAO (DAO de Data Access Object) que rodasse um resultset e gerasse uma lista de objetos do tipo Cliente.

Por exemplo:

[code]package utilitarios;
import java.util.*;

public class ClienteDao
{
public List<Cliente> carregarClientes() {
conexao con = new conexao();
if (!con.conecta()) {
return Collections.emptyList();
}
con.executeSQL(“SELECT * FROM Cliente ORDER BY nome”);
ResultSet rs = con.getResultSet();
List<Cliente> clientes = new ArrayList<>();
while (rs.next()) {
Cliente cli = new Cliente();
cli.setNome(rs.getString(“nome”));
cli.setMatricula(rs.getInt(“matricula”));
clientes.add(cliente);
}
return clientes;
}
}
[/code]

A lista de clientes é que vai para o TableModel. Os tutoriais na assinatura mostra como preencher uma tabela com base numa lista de um objeto de uma classe.