Seria passar o objeto individulamente. eu criei um método para a pesquisa que pesquisa o usuario por nome por meio de uma lista e criei uma outra lista para retornar todos os campos adionados ao banco. assim:
public List<Usuario> getListUsuario(String nome) throws SQLException{
String sql = "Select*from usuario where nome like ?";
PreparedStatement stmt = this.conexao.prepareStatement(sql);
stmt.setString(1,nome);
ResultSet rs = stmt.executeQuery();
List<Usuario> usu = new ArrayList<Usuario>();
while(rs.next()){
Usuario contatoUsuario = new Usuario();
contatoUsuario.setIdUsuario(rs.getInt("idUsuario"));
contatoUsuario.setNome(rs.getString("nome"));
contatoUsuario.setEndereco(rs.getString("endereco"));
contatoUsuario.setBairro(rs.getString("bairro"));
contatoUsuario.setCidade(rs.getString("cidade"));
contatoUsuario.setEstado(rs.getString("estado"));
contatoUsuario.setRG(rs.getString("rg"));
contatoUsuario.setCPF(rs.getString("cpf"));
contatoUsuario.setEmail(rs.getString("email"));
contatoUsuario.setTelefone(rs.getString("telefone"));
usu.add(contatoUsuario);
}
rs.close();
stmt.close();
return usu;
}
Esse método do tipo lista eu crei na classe usuarioDao, juntamente com a outra lista que está retornando todos os usuarios cadastrados.
public List<Usuario> listaContatosUsuario() throws SQLException{
PreparedStatement stm = this.conexao.prepareStatement("select*from usuario");
ResultSet res = stm.executeQuery();
List<Usuario> usua = new ArrayList<Usuario>();
while(res.next()){
Usuario contato = new Usuario();
contato.setIdUsuario(res.getInt("idUsuario"));
contato.setNome(res.getString("nome"));
contato.setEndereco(res.getString("endereco"));
contato.setBairro(res.getString("bairro"));
contato.setCidade(res.getString("cidade"));
contato.setEstado(res.getString("estado"));
contato.setRG(res.getString("rg"));
contato.setCPF(res.getString("cpf"));
contato.setEmail(res.getString("email"));
contato.setTelefone(res.getString("telefone"));
usua.add(contato);
}
res.close();
stm.close();
return usua;
}
no botão pesquisar chamo o método listar contatos
private void listarContatos() throws SQLException {
usuarioDao usu = new usuarioDao();
List<Usuario>contato = usu.getListUsuario("%"+ jTextField1.getText()+"%");
usuarioTableModel model = new usuarioTableModel(contato);
jTable1.setModel(model);
}
observe que no método listar contatos já estou repassando tudo o que pesquisado para o meu modelo de tabela e funciona perfeitamante. O mesmo processo estou fazendo no código personalizado da jTable1, só que dessa vez, passando o método
, que lista todos os usuários, porém não dá certo. Assim:
jTable1 = new javax.swing.JTable();
try{
usuarioDao dao = new usuarioDao();
List<Usuario> cont = dao.listaContatosUsuario();
tabela = new usuarioTableModel(cont);
jTable1.setModel(tabela);
}catch(SQLException e){}
não dá certo. Só mostra a tabela atualizada se eu clicar no botão pesquisar.
Veja abaixo o meu modelo de tabela que fiz baseado no seu exemplo:
ackage br.com.sgbif.view;
import br.com.sgbi.bean.Usuario;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
/**
*
* @author Marcelo Kleyton
*/
public class usuarioTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
private List<Usuario>linhas;
private String[]colunas = new String[]{"Codigo","Nome","Endereço","Telefone"};
public usuarioTableModel(){
linhas = new ArrayList<Usuario>();
}
public usuarioTableModel(List<Usuario>listaDeUsuario) throws SQLException{
linhas = new ArrayList<Usuario>(listaDeUsuario);
}
@Override
public int getRowCount() {
return linhas.size();
}
@Override
public int getColumnCount() {
return colunas.length;
}
@Override
public String getColumnName(int columnIndex){
return colunas[columnIndex];
}
@Override
public Class<?> getColumnClass(int columnIndex){
return String.class;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Usuario usuario = linhas.get(rowIndex);
switch(columnIndex){
case 0: return usuario.getIdUsuario();
case 1: return usuario.getNome();
case 2: return usuario.getEndereco();
case 3: return usuario.getTelefone();
default:
throw new IndexOutOfBoundsException("columnIndex out of bounds");
}
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex){
}
@Override
public boolean isCellEditable( int rowIndex, int columnIndex){
return false;
}
public Usuario getUsuario(int indiceLinha){
return linhas.get(indiceLinha);
}
public void addUsuario(Usuario contUsuario){
linhas.add(contUsuario);
int ultimoIndice = getRowCount()-1;
fireTableRowsInserted(ultimoIndice, ultimoIndice);
}
public void removeUsuario(int indiceLinha){
linhas.remove(indiceLinha);
fireTableRowsDeleted(indiceLinha, indiceLinha);
}
public void addListaUsuarios(List<Usuario>usuario){
int tamanhoAntigo = getRowCount();
linhas.addAll(usuario);
fireTableRowsInserted(tamanhoAntigo, getRowCount()-1);
}
public void limpar(){
linhas.clear();
fireTableDataChanged();
}
public boolean isEmpty(){
return linhas.isEmpty();
}
}
Veja de que forma vc pode me ajudar.