Olha eu consegui fazer meu addRow() adicionar o registro do banco de dados, o problema é que ao invés de mostrar todos os registros que tem na minha base de dados na jtable, ele só mostra o ultimo registro na jtable, olha ai:
vou mandar o código da minha TableModel:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package model.tablemodel;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import model.bean.OcorrenciasBean;
/**
*
* @author henrique
*/
public class OcorrenciasTableModel extends AbstractTableModel {
private List<OcorrenciasBean> linhas;//linhas, dados porque os dados vão ficar nas linhas
private String[] colunas = {"ID","Status"};//colunas
// Constantes representando o índice das colunas
private static final int ID_OCORRENCIA = 0;
private static final int DESC_STATUS = 1;
public OcorrenciasTableModel(){
linhas = new ArrayList<OcorrenciasBean>();
}
//nome das colunas, sem isso as colunas vão ficar com A,B,C... na ordem, ou seja, a ID ia ficar A e o Status ia ficar B.
@Override
public String getColumnName(int column) {
return colunas[column]; //colunas vai receber A e B, e automaticamente vai substituir por Id e status
}
//linhas
@Override
public int getRowCount() {
return linhas.size();//Tamanho da lista, ou seja, quantidade de linhas
}
//colunas
@Override
public int getColumnCount() {
return colunas.length;//Quantidade de colunas, quantidade de colunas
}
//Pegar valores das linhas e das colunas do jtable
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
//se for coluna 1, ele entra nos case que serão as linhas, e assim vai
OcorrenciasBean ocorrencia = linhas.get(rowIndex);//as linhas da jtable vão ser inseridas na variavel linhas que sera igual a ocorrencias.
switch(columnIndex){
case ID_OCORRENCIA:
return ocorrencia.getIdOcorrencia();//essa linha recebe o ID de acordo com a coluna no switch
case DESC_STATUS:
return ocorrencia.getDescStatus();//essa linha recebe a descrição de acordo com a coluna no switch
}
return null;//como é um object e ele precisa de um return, é obrigado a botar o return, e no caso nos bota nulo para não interferir
}
//adiciona linhas
public void addRow(OcorrenciasBean bean){
this.linhas.add(bean);
int ultimoIndice = getRowCount()-1;
this.fireTableRowsInserted(ultimoIndice, ultimoIndice);
this.fireTableDataChanged();
}
//os campos da coluna não podem ser editados
@Override
public boolean isCellEditable(int rowIndex, int columnIndex){
return false;
}
//define o tipo de dados que as colunas recebem, se for a coluna 0 que é meu ID, vai ser inteiro, senão for a coluna 0 então é a coluna 1 que é
@Override
public Class<?> getColumnClass(int columnIndex){
switch(columnIndex){
case ID_OCORRENCIA:
return Integer.class;
case DESC_STATUS:
return String.class;
default:
throw new IndexOutOfBoundsException("columnIndex out of bounds");
}
}
}
Ai com esse método que eu criei na minha Jtable eu consegui fazer mostrar aquela única linha lá em cima:
OcorrenciasTableModel meuModelo = new OcorrenciasTableModel();
public MainOcorrencias(){
initComponents();
this.setExtendedState(MAXIMIZED_BOTH);//DEIXAR EM TELA CHEIA
tbOcorr.setModel(meuModelo);
testeSelect();
//fzdSelect();//chamando o método que faz a consulta do banco de dados e insere na jtable, ele tem que ser executado ao iniciar.
}
public void testeSelect(){
OcorrenciasBean bean = new OcorrenciasBean();//instâncio a bean pra poder botar no meu addRow
ConnectionFactory consulta = new ConnectionFactory();//instâncio essa aqui pra poder pegar meu método select()
ResultSet rs = consulta.select();//boto o select() em um ResultSet pra ficar mais facil
//aqui minha idéia era fazer com que recebessem o nome das duas colunas e funcionasse como todos os exemplos de select em jtable que eu vi, mas deus ruim.
try {
while(rs.next()){
bean.setIdOcorrencia(rs.getInt(1));
bean.setDescStatus(rs.getString(2));
}
} catch (SQLException ex) {
Logger.getLogger(MainOcorrencias.class.getName()).log(Level.SEVERE, null, ex);
}
meuModelo.addRow(bean);//ai ele adiciona a linha, porém só vem o ultimo registro, wtf
}
Me ajuda ai mano, eu to tentando fazer isso faz 1 semana, fiquei pesquisando muito pra aprender como funcionava a JDBC, a conexão, beans, DAOS, jtable, TableModel, DefaultTableModel e etc. Eu não queria fazer um tópico porque parece que é preguiça da minha parte, mas não sei o que fazer, ainda tem muita coisa pra fazer no meu projeto e to empacado nisso. Por favor se puder ver o que acha que ta dando errado pra isso acontecer, eu agradeço.