Ola
Tenho uma classe de banco de dados que esta retornando os dados corretamente.
Uma outra Classe Abstrata.
A duvida é como fazer para carregar meu JTable com AbstractTableModel
Carregar na parte Grafica
Classe Abstract
public class TableEstados extends AbstractTableModel {
private static final long serialVersionUID = 1L;
/**
* Essa lista armazenará os objetos do tipo {@link Cliente} atualmente
* exibidos na tablela.
*/
private List<Estado> estados;
// ==============================================================
// Construtores.
// ==============================================================
/**
* Constutor que simplesmente instancia o nosso {@link List} que usaremos
* para guardar os valores.
*/
public TableEstados() {
// no construtor, instanciamos o List
estados = new ArrayList<Estado>();
}
/**
* Criamos um construtor de conveniência para já popular a lista.
*
* @param lista
* a lista de clientes a ser adicionada.
*/
public TableEstados(List<Estado> lista) {
this();
estados.addAll(lista);
}
// ==============================================================
// Métodos implementados.
// ==============================================================
@Override
public Class<?> getColumnClass(int coluna) {
// todas as colunas representam uma String
return String.class;
}
@Override
public int getColumnCount() {
// esse método deve retornar o número de colunas. No caso, 3 (uma para o
// nome, uma para o sobrenome e uma para o apelido).
return 3;
}
@Override
public String getColumnName(int coluna) {
// vamos retornar o nome de cada coluna
switch (coluna) {
case 0:
return "Cod"; // o nome da primeira coluna
case 1:
return "Estado"; // o nome da segunda
case 2:
return "Abreviatura"; // e o da terceira
default:
return ""; // isso nunca deve ocorrer, pois temos só 3 colunas
}
}
@Override
public int getRowCount() {
// retorna o número de linhas, ou seja, a quantidade de entradas na
// nossa lista.
return estados.size();
}
@Override
public Object getValueAt(int linha, int coluna) {
// vai retornar o valor de determinada célula. A linha representa a
// posição do Estado na nossa lista e a coluna vai ser: 1 - Id, 2 -
// Estado e 3 - Sigla
// primeiro vamos pegar o Estado da linha
Estado e = estados.get(linha);
// façamos um switch
switch (coluna) {
case 0:
return e.getId(); // retornamos o ID
case 1:
return e.getEstado(); // retornamos o Estado
case 2:
return e.getAbreEstado(); // e a Sigla
default:
return null; // isso nunca deve ocorrer, pois temos só 3 colunas
}
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
// nesse caso, todas as células são editáveis
return true;
}
@Override
public void setValueAt(Object valor, int linha, int coluna) {
// aqui devemos atualizar o valor de nossos Estado
// vemos em qual linha ele está
Estado c = estados.get(linha);
// e vemos o que será atualizado
switch (coluna) {
case 0:
c.setId(Integer.valueOf(valor.toString())); // mudamos o id
break;
case 1:
c.setEstado(valor.toString()); // mudamos o estado
break;
case 2:
c.setAbreEstado(valor.toString()); // e a sigla
break;
}
// é importante notificar os listeners a cada alteração
fireTableDataChanged();
}
// ==============================================================
// Até aqui seria o mínimo necessário para um TableModel funcional, mas
// ainda não há métodos para adicionar, remover ou resgatar objetos. Vamos
// criá-los.
// ==============================================================
/**
* Adiciona um novo {@link Cliente} e notifica os listeners que um novo
* registro foi adicionado.
*/
public void adiciona(Estado e) {
estados.add(e);
// informamos os listeners que a linha (size - 1) foi adicionada
fireTableRowsInserted(estados.size() - 1, estados.size() - 1);
}
/**
* Similar ao {@link #adiciona(Cliente)}, porém para remover. Recebe o
* índice do cliente a ser removido. Se não souber o índice, use o método
* {@link #getIndice(Cliente)} antes.
*/
public void remove(int indice) {
estados.remove(indice);
fireTableRowsDeleted(indice, indice);
}
/**
* Retorna o índice de determinado cliente.
*/
public int getIndice(Estado e) {
return estados.indexOf(e);
}
/**
* Adiciona todos os clientes na lista à este modelo.
*/
public void adicionaLista(List<Estado> lista) {
int i = estados.size();
estados.addAll(lista);
fireTableRowsInserted(i, i + lista.size());
}
/**
* Esvazia a lista.
*/
public void limpaLista() {
int i = estados.size();
estados.clear();
fireTableRowsDeleted(0, i - 1);
}
public void ordenarPorNome() {
//ordena pelo nome
Collections.sort(estados, new Comparator<Estado>() {
public int compare(Estado o1, Estado o2) {
return o1.getEstado().compareTo(o2.getEstado());
}
});
//avisa que a tabela foi alterada
fireTableDataChanged();
}
}
Consulta em BD
public class EstadoDao{
public List<Estado> getLista(String userName) throws SQLException{
String sql = "SELECT * FROM tb_estados WHERE fi_estado LIKE ? ";
PreparedStatement stmt = this.conexao.prepareStatement(sql);
stmt.setString(1, userName);
ResultSet rs = stmt.executeQuery();
List <Estado> listaEstados = new ArrayList<Estado>();
while (rs.next()){
Estado c1 = new Estado();
c1.setAbreEstado(rs.getString("fi_abreviatura"));
c1.setEstado(rs.getString("fi_estado"));
c1.setId(Integer.valueOf(rs.getString("pk_id_estado")));
// c1.setUserName(rs.getString(""));
//c1.setPassWord("");
// c1.setFi_id(Integer.valueOf(rs.getString("fi_pk_id")));
// c1.setSubstancia(rs.getString("fi_substancia"));
listaEstados.add(c1);
}
rs.close();
stmt.close();
return listaEstados;
}
Parte grafica
public class JiConsultaEstado extends JInternalFrame {
private static JiConsultaEstado jConsulta;
private JTable table;
private JTextField jtPesquisar;
List<Estado> estados;
private static JiConsultaEstado singleton;
public static JiConsultaEstado getInstance() {
if (singleton == null) {
singleton = new JiConsultaEstado();
}
return singleton;
}
public JiConsultaEstado() {
super("Consulta Estados",true,true,false,false);
initComponents();
this.setVisible(true);
}
protected void listarestado() throws SQLException {
EstadoDao dao = new EstadoDao();
// Pesquisa somente pelo primeiro nome
estados = dao.getLista(jtPesquisar.getText() + "%");
// mostra pesquisa atualizada
//mostrarPesquisa(cliente);
}
public void initComponents(){
setBounds(100, 100, 450, 300);
getContentPane().setLayout(null);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(0, 64, 440, 205);
getContentPane().add(scrollPane);
table = new JTable(new TableEstados());
//table.getColumnModel().getColumn(1).setMaxWidth(1800);
//table.getColumnModel().getColumn(0).setMaxWidth(90);
table.getColumnModel().getColumn(0).setPreferredWidth(100);
table.getColumnModel().getColumn(1).setPreferredWidth(650);
table.getColumnModel().getColumn(2).setPreferredWidth(200);
//setMinWidth(4);
// table.getColumnModel().getColumn(2).setMinWidth(5);
scrollPane.setViewportView(table);
JPanel panel = new JPanel();
panel.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
panel.setBounds(0, 0, 440, 63);
getContentPane().add(panel);
panel.setLayout(null);
JPanel panel_1 = new JPanel();
panel_1.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
panel_1.setBounds(12, 12, 416, 39);
panel.add(panel_1);
panel_1.setLayout(null);
jtPesquisar = new JTextField();
jtPesquisar.setBounds(12, 8, 274, 23);
panel_1.add(jtPesquisar);
jtPesquisar.setColumns(10);
JButton btnNewButton = new JButton("Pesquisar");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try {
listarestado();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
btnNewButton.setBounds(298, 7, 106, 24);
panel_1.add(btnNewButton);
}
}