Ola a todos, estou com um probleminha aqui, criei uma jTable para mostrar os dados no banco, ele mostra tudo certinho, porém quando vou inserir um novo registro ele não atualiza o table, para que isso acontece eu tenho que fechar a tela e abri-la de novo, ja tentei usar fireTableDataChanged e o repaint e nenhum dos dois funcionou, continua o mesmo problema.
public class ProgramaHistoricoTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
private List<ProgramaHistorico> pHistorico;
public ProgramaHistoricoTableModel() {
// no construtor, instanciamos o List
pHistorico = new ArrayList<ProgramaHistorico>();
}
public ProgramaHistoricoTableModel(List<ProgramaHistorico> lista) {
this();
pHistorico.addAll(lista);
}
@Override
public Class<?> getColumnClass(int coluna) {
return String.class;
}
public int getColumnCount() {
return 5;
}
@Override
public String getColumnName(int coluna) {
switch (coluna) {
case 0:
return "ProgId";
case 1:
return "IdHistórico";
case 2:
return "Data";
case 3:
return "Hora";
case 4:
return "Programador";
default:
return "";
}
}
public int getRowCount() {
return pHistorico.size();
}
public Object getValueAt(int linha, int coluna) {
ProgramaHistorico ph = (ProgramaHistorico)pHistorico.get(linha);
switch (coluna) {
case 0:
return ph.getProgId();
case 1:
return ph.getIdprogramahistorico();
case 2:
return ph.getData();
case 3:
return ph.getHora();
case 4:
return ph.getProgramador();
default:
return null;
}
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
public void setValueAt(ProgramaHistorico valor) {
ProgramaHistorico c = new ProgramaHistorico();
if (pHistorico.size() != 0){
c = pHistorico.get(pHistorico.size() + 1);
}
for (int i = 0; i < 4; i++) {
switch (i) {
case 0:
c.setProgId(valor.getProgId());
break;
case 1:
c.setProgId(valor.getProgId());
break;
case 2:
c.setProgId(valor.getProgId());
break;
case 3:
c.setProgId(valor.getProgId());
break;
}
}
fireTableDataChanged();
}
public void adiciona(ProgramaHistorico ph) {
pHistorico.add(ph);
fireTableRowsInserted(pHistorico.size() - 1, pHistorico.size() - 1);
}
public void remove(int indice) {
pHistorico.remove(indice);
fireTableRowsDeleted(indice, indice);
}
public int getIndice(Programa c) {
return pHistorico.indexOf(c);
}
public void adicionaLista(List<ProgramaHistorico> lista) {
int i = pHistorico.size();
pHistorico.addAll(lista);
fireTableRowsInserted(i, i + lista.size());
}
public void limpaLista() {
int i = pHistorico.size();
pHistorico.clear();
fireTableRowsDeleted(0, i - 1);
}
}
método que substituiria o table
public void refreshTable(){
//jtable.repaint();
model.fireTableDataChanged();
jtable.repaint();
JPanelSEProgramas tab = new JPanelSEProgramas();
tab.instanciaComponentes();
}
O que seria isso? Só para subir o post? …
Eu axo que tá faltando vc adicionar o novo objeto no model…
Bom ver que usuários estão dexando o default table model pra lá =)
no refresh viou chamar o setValueAte passar o objeto atualizado como parametro
public void refreshTable(ProgramaHistorico prog){
model.setValueAt(prog);
model.fireTableDataChanged();
jtable.repaint();
}
e aqui eu seto os valores…só que a tabela continua a mesma…
public void setValueAt(ProgramaHistorico prog) {
ProgramaHistorico c = new ProgramaHistorico();
if (pHistorico.size() != 0){
c = pHistorico.get(pHistorico.size() + 1);
}
for (int i = 0; i < 4; i++) {
switch (i) {
case 0:
c.setProgId(prog.getProgId());
break;
case 1:
c.setIdprogramahistorico(prog.getIdprogramahistorico());
break;
case 2:
c.setProgramador(prog.getProgramador());
break;
case 3:
c.setDescricao(prog.getDescricao());
case 4:
c.setData(prog.getData());
case 5:
c.setHora(prog.getHora());
break;
}
}
fireTableDataChanged();
}
Não entendi. Você cria um novo objeto e não chama o método adiciona do seu model? Pq vc está chamando o setValueAt?
Para que algo a mais pareça no seu JTable, você deve chamar o método adiciona! Ele é que vai incluir o método na lista interna do model e avisar a table que tem um objeto a mais por lá.