Ops! Faltou o método getRowCount:
@Override
public int getRowCount() {
return getValues().size();
}
Abraços!
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!!
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]
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.