Atualizar jTable o inserir registro no banco

o model…

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:
			SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
			return sdf.format(ph.getData().getTime()); 
		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 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();
	}*/
	
	
	  @Override  
	     public void setValueAt(Object valor, int linha, int coluna) {  
	         // aqui devemos atualizar o valor de nossos Clientes  
	         // vemos em qual linha ele está  
	         ProgramaHistorico c = new ProgramaHistorico();  
	         // e vemos o que será atualizado  
	     	for (int i = 0; i < 6; i++) {
				switch (i) {
				case 0:
					c.setProgId(((ProgramaHistorico) valor).getProgId()); 
					break;
				case 1:
					c.setIdprogramahistorico(((ProgramaHistorico) valor).getIdprogramahistorico());
					break;
				case 2:
					c.setProgramador(((ProgramaHistorico) valor).getProgramador());
					break;
				case 3:
					c.setDescricao(((ProgramaHistorico) valor).getDescricao());
					break;
				case 4:
					c.setData(((ProgramaHistorico) valor).getData());
					break;
				case 5:
					c.setHora(((ProgramaHistorico) valor).getHora());
					break;
				}
			}
	         pHistorico.add(c);
	         // é importante notificar os listeners a cada alteração daew assim...
	         
	         fireTableDataChanged();  
	     }  

	
	public void adiciona(ProgramaHistorico ph, int progId) {
		adicionaLista(ProgramasDaoImpl.listarHistoricosProgramas(progId));
		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);
	}
	
	

}

neste metodo refrehTbale eu chamo o “adiciona” do model

	public void refreshTable(ProgramaHistorico prog){
	  	model.adiciona(prog,prog.getProgId());
		model.adicionaLista(ProgramasDaoImpl.listarHistoricosProgramas(progId));
		jtable.setModel(model);
		jtable.repaint();
	}

e mesme alimenta minha lista novamente através do “listarHistoricosProgramas(progId)” a taberla não é alterada…

Põe o código todo da classe onde o método refreshTable está. Eu havia pedido o código que usa o model, não o código do model em si. Esse vc já havia postado e aparentemente está certo.

Como eu já falei ali atrás, não deveria haver um método como o refreshTable.

ops…foi mals…

[code]
public class JPanelSEProgramas extends javax.swing.JFrame implements TableModelListener {

private JPanel jPanelSE = null;

private JLabel jLabelNome = null;
private JMaxLenTextField jMaxLenTextFieldNome = null;
private JMaxLenTextField jMaxLenTextFieldDesc = null;
private JLabel jLabelProgId = null;
private JNumberTextField jNumberTextFieldProgId = null;
private String msg = null;
private int progId = 0;
private boolean alterar = false;
private String descricao = null;  //  @jve:decl-index=0:

private JButton jButtonIncluir;
private JButton jButtonAlterar;
private JButton jButtonExcluir;
private JButton jButtonOk;
private JButton jButtonDescricao;

private ProgramaHistoricoTableModel model;
private JScrollPane scrollPane;

Programa prog = new Programa(); //  @jve:decl-index=0:
private ProgramasDaoImpl progDao;//  @jve:decl-index=0:


public static final int MODULO_LAB = 0;
public static final int MODULO_TAB = 1;
public static final int MODULO_ADM = 2;
public static final String MODULO_LIST[] = {"LAB","TAB","ADM"};  //  @jve:decl-index=0:


private String desc;  //  @jve:decl-index=0:

TableModel m = new DefaultTableModel();  
JTable jtable = new JTable(m);  

private JLabel jLabelModulo = null;
private JComboBox jComboBoxModulo = null;

public JPanelSEProgramas(List<Programa> list) {
	alterar = true;
	progId = list.get(0).getProgId();
	instanciaComponentes();
	initialize();
	initializeComponents(list);
}

public JPanelSEProgramas() {
	instanciaComponentes();
	initialize();
}



public void initialize(){
	this.setBounds(new Rectangle(0, 0, 740, 600));
	this.add(getJPanelSE(), java.awt.BorderLayout.CENTER);
	this.setTitle("Cadastro de Programas");
}

public void initializeComponents(List<Programa> list){
	jNumberTextFieldProgId.setNumber(list.get(0).getProgId());
	jNumberTextFieldProgId.setEnabled(false);
	msg = list.get(0).getDescricao();
	jMaxLenTextFieldNome.setText(list.get(0).getNomePrograma());
	jComboBoxModulo.setSelectedIndex(list.get(0).getModulo());
	} 

private JPanel getJPanelSE(){
	if(jPanelSE == null){ 
		jPanelSE = new JPanel();	
		jPanelSE.setBounds(0, 0, 731, 584);
		jPanelSE.setLayout(null);
		jPanelSE.add(getJButtonIncluir());
		jPanelSE.add(getJButtonAlterar());
		jPanelSE.add(getJButtonExcluir());
		jPanelSE.add(getJButtonOk());
		jPanelSE.add(getJButtonDescricao());
		jPanelSE.add(getJLabelProgId());
		jPanelSE.add(getJLabelNome());
		jPanelSE.add(getJLabelModulo());
		jPanelSE.add(getJNumberTextFieldProgId());
		jPanelSE.add(getJMaxLenTextFieldNome());
		jPanelSE.add(getJComboBoxModulo());
		add(scrollPane);
}
	return 	jPanelSE;
}

/**************************************** NOME *********************************************/

private JLabel getJLabelNome() {
	if (jLabelNome == null){
		jLabelNome = new JLabel();
		jLabelNome.setBounds(12, 31, 47, 16);
		jLabelNome.setText("Nome");
		jLabelNome.setLabelFor(jMaxLenTextFieldNome);
	}
	return jLabelNome;
}

private JMaxLenTextField getJMaxLenTextFieldNome() {
	if (jMaxLenTextFieldNome == null){
		jMaxLenTextFieldNome = new JMaxLenTextField();
		jMaxLenTextFieldNome.setBounds(73, 27, 241, 20);
	}
	return jMaxLenTextFieldNome;
}

/**************************************** PROGID *********************************************/

private JLabel getJLabelProgId() {
	if (jLabelProgId == null){
		jLabelProgId = new JLabel();
		jLabelProgId.setBounds(12, 9, 47, 16);
		jLabelProgId.setText("ProgID");
		jLabelProgId.setLabelFor(jComboBoxModulo);
	}
	return jLabelProgId;
}

private JNumberTextField getJNumberTextFieldProgId() {
	if (jNumberTextFieldProgId == null){
		jNumberTextFieldProgId = new JNumberTextField();
		jNumberTextFieldProgId.setBounds(73, 5, 97, 20);
	}
	return jNumberTextFieldProgId;
}

/****************************************   MÓDULO   *********************************************/



private JLabel getJLabelModulo() {
	if (jLabelModulo == null){
		jLabelModulo = new JLabel();
		jLabelModulo.setBounds(12, 53, 47, 16);
		jLabelModulo.setText("Módulo");
		jLabelModulo.setLabelFor(jComboBoxModulo);
	}
	return jLabelModulo;
}

private JComboBox getJComboBoxModulo() {
	if (jComboBoxModulo == null) {
		jComboBoxModulo = new JComboBox();
		jComboBoxModulo.setBounds(73, 49, 138, 20);
		for (int i = 0; i < MODULO_LIST.length; i++) {
			jComboBoxModulo.addItem(MODULO_LIST[i]);
		}
	}
	return jComboBoxModulo;
}

/**************************************** OUTROS *********************************************/

private JButton getJButtonIncluir() {
	if (jButtonIncluir == null) {
		jButtonIncluir = new JButton();
		jButtonIncluir.setRequestFocusEnabled(false);
		jButtonIncluir.setIcon(new ImageIcon("C:/ISHistorico/images/icons/20x20/DocumentIn.gif"));
		jButtonIncluir.setBounds(631, 111, 98, 26);
		jButtonIncluir.setText("Incluir");
		jButtonIncluir.addActionListener(new java.awt.event.ActionListener() {   
			public void actionPerformed(java.awt.event.ActionEvent e) {  
				new JPanelSeHistorico(progId).setVisible(true);
				
			} 
		
		});
	}
	return jButtonIncluir;
}


private JButton getJButtonAlterar() {
	if (jButtonAlterar == null) {
		jButtonAlterar = new JButton();
		jButtonAlterar.setRequestFocusEnabled(false);
		jButtonAlterar.setIcon(new ImageIcon("C:/ISHistorico/images/icons/20x20/DocumentDraw.gif"));
		jButtonAlterar.setBounds(631, 141, 98, 26);
		jButtonAlterar.setText("Alterar");
		jButtonAlterar.addActionListener(new java.awt.event.ActionListener() { 
			public void actionPerformed(java.awt.event.ActionEvent e) { 
				int a = jtable.getSelectedRow();
				//Programa p = new Programa();
				List<ProgramaHistorico> list = new ArrayList<ProgramaHistorico>();
				int progId = ((Integer)jtable.getModel().getValueAt(a,0));  
				progDao = new ProgramasDaoImpl();
				list = progDao.loadHistoricoProgramaByProgId(progId);
				new JPanelSeHistorico(list).setVisible(true);
			}  
		});
	}
	return jButtonAlterar;
}

private JButton getJButtonExcluir() {
	if (jButtonExcluir == null) {
		jButtonExcluir = new JButton();
		jButtonExcluir.setRequestFocusEnabled(false);
		jButtonExcluir.setIcon(new ImageIcon("C:/ISHistorico/images/icons/20x20/DocumentDelete.gif"));
		jButtonExcluir.setBounds(631, 171, 98, 26);
		jButtonExcluir.setText("Excluir");
		jButtonExcluir.addActionListener(new java.awt.event.ActionListener() { 
			public void actionPerformed(java.awt.event.ActionEvent e) {   
				int a = jtable.getSelectedRow();
				ProgramaHistorico p = new ProgramaHistorico();
				List<ProgramaHistorico> list = new ArrayList<ProgramaHistorico>();
				int progId = ((Integer)jtable.getModel().getValueAt(a,0));  
				progDao = new ProgramasDaoImpl();
				list = progDao.loadHistoricoProgramaByProgId(progId);
					p.setIdprogramahistorico(list.get(0).getIdprogramahistorico());
					p.setProgId(list.get(0).getProgId());
					p.setDescricao(list.get(0).getDescricao());
					p.setProgramador(list.get(0).getProgramador());
					p.setData( list.get(0).getData());
					p.setHora(list.get(0).getHora());
				
				progDao.removeHistorico(p);
			}
		});
	}
	return jButtonExcluir;
}


private JButton getJButtonOk() {
	if (jButtonOk == null) {
		jButtonOk = new JButton();
		jButtonOk.setRequestFocusEnabled(false);
		jButtonOk.setBounds(73, 76, 105, 26);
		jButtonOk.setText("   Ok       ");
		jButtonOk.setIcon(new ImageIcon("C:/ISHistorico/images/icons/20x20/Save.gif"));
		
		jButtonOk.addActionListener(new java.awt.event.ActionListener() { 
			public void actionPerformed(java.awt.event.ActionEvent e) { 
				 
	                try {
	                	ProgramasDaoImpl<Programa> dao = new ProgramasDaoImpl<Programa>();
	                	JPanelSpEditDescricaoPrograma spDesc = new JPanelSpEditDescricaoPrograma();
	                			String a = jMaxLenTextFieldNome.getText();
	                			if (!jMaxLenTextFieldNome.getText().trim().equals("") && jNumberTextFieldProgId.getNumber().intValue() > 0 ){
	                				if (comparaProgId(jNumberTextFieldProgId.getNumber().intValue())){
	                					JOptionPane.showMessageDialog(null, "ProgId ja cadastrado!");
	                				}else{
	                			prog.setNomePrograma(jMaxLenTextFieldNome.getText()); 
	                			prog.setProgId(jNumberTextFieldProgId.getNumber().intValue());
	                			prog.setModulo(jComboBoxModulo.getSelectedIndex());
	                			prog.setDescricao(descricao);
	                			prog.setDescricao(spDesc.getDesc());
	                			if (alterar){
	                				dao.update(prog);
	                			}else {
	                				dao.create(prog);
	                				List<Programa> list = dao.listarProgramas();
	                				ProgramaTableModel modell = new ProgramaTableModel(list);
	                				modell.adiciona(prog);
	                				instanciaComponentes();
	                				
	                			}
	                			limpar(); }
	                			
	                }else {
	                	JOptionPane.showMessageDialog(null, "Todos os campos devem ser informados");
	                }
	                		
	                }
	                catch (Exception ei){
	                	ei.printStackTrace();
	                }
			}
		});
	}
	return jButtonOk;
}


private JButton getJButtonDescricao() {
	if (jButtonDescricao == null) {
		jButtonDescricao = new JButton();
		jButtonDescricao.setRequestFocusEnabled(false);
		jButtonDescricao.setBounds(209, 76, 105, 26);
		jButtonDescricao.setText("Descrição");
		jButtonDescricao.addActionListener(new java.awt.event.ActionListener() { 
			public void actionPerformed(java.awt.event.ActionEvent e) {    
				try {
					if (alterar){
						new JPanelSpEditDescricaoPrograma(msg).setVisible(true);
					}else {
						new JPanelSpEditDescricaoPrograma().setVisible(true);
					}
				}catch (Exception ei){
					ei.printStackTrace();
					}
				}
		}); 
	}
	return jButtonDescricao;
}

public void fechar(){
	this.setVisible(false); 
}

public void limpar(){
	jMaxLenTextFieldNome = null;
	jNumberTextFieldProgId = null;
	this.setVisible(false);
	
	
}

public  JScrollPane instanciaComponentes() { 
	model = new ProgramaHistoricoTableModel();
	model.addTableModelListener(this);
	model.adicionaLista(ProgramasDaoImpl.listarHistoricosProgramas(progId));
	jtable = new JTable();
	jtable.setModel(model);
	scrollPane = new JScrollPane();
	scrollPane.setViewportView(jtable);
	
	jtable.setSize(new Dimension(241, 101));
	scrollPane.setBounds(4, 111, 616, 413);
	jtable.getColumnModel().getColumn(0).setMaxWidth(65);
	jtable.getColumnModel().getColumn(1).setMaxWidth(65);
	jtable.getColumnModel().getColumn(2).setMaxWidth(95);
	jtable.getColumnModel().getColumn(3).setMaxWidth(65);
	jtable.getColumnModel().getColumn(4).setMaxWidth(330);
	jtable.repaint();
	return scrollPane;
	
}

public void refreshTable(ProgramaHistorico prog){
  	model.adiciona(prog,prog.getProgId());
	model.adicionaLista(ProgramasDaoImpl.listarHistoricosProgramas(progId));
	jtable.setModel(model);
	jtable.repaint();
}

public void setDescricao(String descricao) {
	this.descricao = descricao;
	prog.setDescricao(descricao);
	}

public String getDescricao() {
	return descricao;
}


public void tableChanged(TableModelEvent arg0) {
	// TODO Auto-generated method stub
	
}

public boolean comparaProgId(int progId){
	ProgramasDaoImpl<Programa> dao = new ProgramasDaoImpl<Programa>();
	List<Programa> list = dao.loadProgramaByProgId(progId);
	if (list.size() > 0){
		return true;
	}else {
		return false;
	}
}

}[/code]

Por que existe outro model sendo criado no método adicionar?

Você deveria estar chamando o método adicionar sobre o model que está na tabela, não sobre um novo model. Tente refatorar seu código para:

  1. Só haver uma única criação de model. Na sua tela tem 3.
  2. Só haver uma única chamada à instanciaComponentes.

Quando mexer nos dados da JTable, você precisa atualizar o model que está dentro do JTable. E não em qualquer JTable, mas na que está sendo exibida.
Se criar um model novo e chamar adicionar nesse model novo, nada será exibido mesmo.

é que u possuo duas tabelas… uma de programas, e outra programaHistoricos

só que a tabela “programasHistoricos” se encontra na janela JPanelSEProgramas, e a tabela “programas” na janela JPanelSelectProgramas

Como eu falei, você nunca deverá ter que chamar instanciaComponentes mais de uma vez. Cada vez que você chama esse método, você estará criando um model novo. E isso está errado.

Quando você criar um novo objeto, você deve:

  1. Salvar esse objeto em seu dao;
  2. Chamar o método adiciona do seu model.

Mais nada. Não é necessário dar refresh() na JTable, ou criar novas instâncias do model. Aliás, tome muito cuidado com isso. Duplicar componentes por acidente gera bugs dificílimos de corrigi (acredite, eu mesmo já me descabelei várias vezes por isso).

Por isso, certifique-se em primeira mão que:

  1. O model só é criado uma única vez. E depois é esse mesmo model que é usado;
  2. O JTable também é criado só uma vez. E está mesmo usando o model criado no passo anterior.
  3. O painel onde o JTable está também é o mesmo painel que é chamado todas as vezes.

Sintomas para problemas disso são os que você citou. Você cria a tabela, preenche e na hora do debug o model está vazio, por exemplo. Obviamente, pq o model que você está vendo na hora do debug não é o mesmo que você usou na hora de criar o JTable.

tirei as outra criações do model, agora ele só cria dentro do metodo instanciaComponentes , e esta chamando o metodo instanciaComponentes so uma vez…e adivinha…

continua do mesmo geito

IOEghIEIEHoiEHIHEOIUE

sim, mais eu preciso desse metodo refresh pois eu insiro os dados em outra janela…que é só para inserção…e depois de salva-lo em banco eu chamo JPanelSEPrograma.refresh() para atualizar a tabela

Ainda tem caroço nesse angu… Acho que é hora de botar o depurador em ação.

Coloca um breakpoint na hora de adicionar, e na hora de desenhar a tabela. Vai ser um pouco chato. Você precisa se certificar que após adicionar um novo objeto:

  1. O método adiciona do seu model é chamado
  2. A lista (que deve ter os dados que estão sendo exibidos na tabela), ganha efetivamente mais um registro;
  3. Que o TableRowsInserted é chamado.
  4. Que na hora de repintar a tabela, a lista que o model está usando contém mesmo um objeto a mais do que tinha antes.

Tenta acompanhar certinho aí o que ocorre. O TableModel me parece bastante certo, então é quase certeza que o problema não é ele.

acho q agora estaa no caminho…fiz algumas alterações aqui, e verifiquei no debug quando ele seta o model no jTable, o list du model esta atualizado td certinhoo, e dentro do jTable, a lista foi inserida corretamente, …porém a tabela não altera…mais pelo menos deu uma afunilada em algumas possibilidades, o problema deve estar no meu “repaint” ou no meu JFrame…segue o fonte da tela inteira do JFrame

package br.com.is.ishistorico.gui;



import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

import um.filteredtext.JNumberTextField;

import br.com.is.commons.ui.combobox.JConditionsComboBox;
import br.com.is.commons.ui.textfield.JMaxLenTextField;
import br.com.is.ishistorico.dao.ProgramasDaoImpl;
import br.com.is.ishistorico.model.Programa;
import br.com.is.ishistorico.model.ProgramaHistorico;
import br.com.is.ishistorico.model.ProgramaHistoricoTableModel;
import br.com.is.ishistorico.model.ProgramaTableModel;

import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;

public class JPanelSEProgramas extends javax.swing.JFrame implements TableModelListener  {

	
	private JPanel jPanelSE = null;
	
	private JLabel jLabelNome = null;
	private JMaxLenTextField jMaxLenTextFieldNome = null;
	private JMaxLenTextField jMaxLenTextFieldDesc = null;
	private JLabel jLabelProgId = null;
	private JNumberTextField jNumberTextFieldProgId = null;
	private String msg = null;
	private int progId = 0;
	private boolean alterar = false;
	private String descricao = null;  //  @jve:decl-index=0:
	
	private JButton jButtonIncluir;
	private JButton jButtonAlterar;
	private JButton jButtonExcluir;
	private JButton jButtonOk;
	private JButton jButtonDescricao;
	
	private ProgramaHistoricoTableModel model = new ProgramaHistoricoTableModel();
	private JScrollPane scrollPane;
	
	Programa prog = new Programa(); //  @jve:decl-index=0:
	private ProgramasDaoImpl progDao;//  @jve:decl-index=0:
	
	
	public static final int MODULO_LAB = 0;
	public static final int MODULO_TAB = 1;
	public static final int MODULO_ADM = 2;
	public static final String MODULO_LIST[] = {"LAB","TAB","ADM"};  //  @jve:decl-index=0:
	
	
	private String desc;  //  @jve:decl-index=0:
	
	JTable jtable = new JTable();;  
	
	private JLabel jLabelModulo = null;
	private JComboBox jComboBoxModulo = null;
	
	public JPanelSEProgramas(List<Programa> list) {
		alterar = true;
		progId = list.get(0).getProgId();
		instanciaComponentes();
		initialize();
		initializeComponents(list);
	}
	
	public JPanelSEProgramas() {
		instanciaComponentes();
		initialize();
	}
	
	
	
	public void initialize(){
		this.setBounds(new Rectangle(0, 0, 740, 600));
		this.add(getJPanelSE(), java.awt.BorderLayout.CENTER);
		this.setTitle("Cadastro de Programas");
	}
	
	public void initializeComponents(List<Programa> list){
		jNumberTextFieldProgId.setNumber(list.get(0).getProgId());
		jNumberTextFieldProgId.setEnabled(false);
		msg = list.get(0).getDescricao();
		jMaxLenTextFieldNome.setText(list.get(0).getNomePrograma());
		jComboBoxModulo.setSelectedIndex(list.get(0).getModulo());
		} 
	
	private JPanel getJPanelSE(){
		if(jPanelSE == null){ 
			jPanelSE = new JPanel();	
			jPanelSE.setBounds(0, 0, 731, 584);
			jPanelSE.setLayout(null);
			jPanelSE.add(getJButtonIncluir());
			jPanelSE.add(getJButtonAlterar());
			jPanelSE.add(getJButtonExcluir());
			jPanelSE.add(getJButtonOk());
			jPanelSE.add(getJButtonDescricao());
			jPanelSE.add(getJLabelProgId());
			jPanelSE.add(getJLabelNome());
			jPanelSE.add(getJLabelModulo());
			jPanelSE.add(getJNumberTextFieldProgId());
			jPanelSE.add(getJMaxLenTextFieldNome());
			jPanelSE.add(getJComboBoxModulo());
			add(scrollPane);
	}
		return 	jPanelSE;
	}
	
/****************************************   NOME   *********************************************/
	
	
	private JLabel getJLabelNome() {
		if (jLabelNome == null){
			jLabelNome = new JLabel();
			jLabelNome.setBounds(12, 31, 47, 16);
			jLabelNome.setText("Nome");
			jLabelNome.setLabelFor(jMaxLenTextFieldNome);
		}
		return jLabelNome;
	}
	
	private JMaxLenTextField getJMaxLenTextFieldNome() {
		if (jMaxLenTextFieldNome == null){
			jMaxLenTextFieldNome = new JMaxLenTextField();
			jMaxLenTextFieldNome.setBounds(73, 27, 241, 20);
		}
		return jMaxLenTextFieldNome;
	}
	
/****************************************   PROGID   *********************************************/
	
	
	
	private JLabel getJLabelProgId() {
		if (jLabelProgId == null){
			jLabelProgId = new JLabel();
			jLabelProgId.setBounds(12, 9, 47, 16);
			jLabelProgId.setText("ProgID");
			jLabelProgId.setLabelFor(jComboBoxModulo);
		}
		return jLabelProgId;
	}
	
	private JNumberTextField getJNumberTextFieldProgId() {
		if (jNumberTextFieldProgId == null){
			jNumberTextFieldProgId = new JNumberTextField();
			jNumberTextFieldProgId.setBounds(73, 5, 97, 20);
		}
		return jNumberTextFieldProgId;
	}
	
	/****************************************   MÓDULO   *********************************************/
	
	
	
	private JLabel getJLabelModulo() {
		if (jLabelModulo == null){
			jLabelModulo = new JLabel();
			jLabelModulo.setBounds(12, 53, 47, 16);
			jLabelModulo.setText("Módulo");
			jLabelModulo.setLabelFor(jComboBoxModulo);
		}
		return jLabelModulo;
	}
	
	private JComboBox getJComboBoxModulo() {
		if (jComboBoxModulo == null) {
			jComboBoxModulo = new JComboBox();
			jComboBoxModulo.setBounds(73, 49, 138, 20);
			for (int i = 0; i < MODULO_LIST.length; i++) {
				jComboBoxModulo.addItem(MODULO_LIST[i]);
			}
		}
		return jComboBoxModulo;
	}
	
	
/****************************************   OUTROS   *********************************************/	
	
	private JButton getJButtonIncluir() {
		if (jButtonIncluir == null) {
			jButtonIncluir = new JButton();
			jButtonIncluir.setRequestFocusEnabled(false);
			jButtonIncluir.setIcon(new ImageIcon("C:/ISHistorico/images/icons/20x20/DocumentIn.gif"));
			jButtonIncluir.setBounds(631, 111, 98, 26);
			jButtonIncluir.setText("Incluir");
			jButtonIncluir.addActionListener(new java.awt.event.ActionListener() {   
				public void actionPerformed(java.awt.event.ActionEvent e) {  
					new JPanelSeHistorico(progId).setVisible(true);
					
				} 
			
			});
		}
		return jButtonIncluir;
	}
	
	
	private JButton getJButtonAlterar() {
		if (jButtonAlterar == null) {
			jButtonAlterar = new JButton();
			jButtonAlterar.setRequestFocusEnabled(false);
			jButtonAlterar.setIcon(new ImageIcon("C:/ISHistorico/images/icons/20x20/DocumentDraw.gif"));
			jButtonAlterar.setBounds(631, 141, 98, 26);
			jButtonAlterar.setText("Alterar");
			jButtonAlterar.addActionListener(new java.awt.event.ActionListener() { 
				public void actionPerformed(java.awt.event.ActionEvent e) { 
					int a = jtable.getSelectedRow();
					//Programa p = new Programa();
					List<ProgramaHistorico> list = new ArrayList<ProgramaHistorico>();
					int progId = ((Integer)jtable.getModel().getValueAt(a,0));  
					progDao = new ProgramasDaoImpl();
					list = progDao.loadHistoricoProgramaByProgId(progId);
					new JPanelSeHistorico(list).setVisible(true);
				}  
			});
		}
		return jButtonAlterar;
	}
	
	private JButton getJButtonExcluir() {
		if (jButtonExcluir == null) {
			jButtonExcluir = new JButton();
			jButtonExcluir.setRequestFocusEnabled(false);
			jButtonExcluir.setIcon(new ImageIcon("C:/ISHistorico/images/icons/20x20/DocumentDelete.gif"));
			jButtonExcluir.setBounds(631, 171, 98, 26);
			jButtonExcluir.setText("Excluir");
			jButtonExcluir.addActionListener(new java.awt.event.ActionListener() { 
				public void actionPerformed(java.awt.event.ActionEvent e) {   
					int a = jtable.getSelectedRow();
					ProgramaHistorico p = new ProgramaHistorico();
					List<ProgramaHistorico> list = new ArrayList<ProgramaHistorico>();
					int progId = ((Integer)jtable.getModel().getValueAt(a,0));  
					progDao = new ProgramasDaoImpl();
					list = progDao.loadHistoricoProgramaByProgId(progId);
						p.setIdprogramahistorico(list.get(0).getIdprogramahistorico());
						p.setProgId(list.get(0).getProgId());
						p.setDescricao(list.get(0).getDescricao());
						p.setProgramador(list.get(0).getProgramador());
						p.setData( list.get(0).getData());
						p.setHora(list.get(0).getHora());
					
					progDao.removeHistorico(p);
				}
			});
		}
		return jButtonExcluir;
	}
	
	
	private JButton getJButtonOk() {
 		if (jButtonOk == null) {
			jButtonOk = new JButton();
			jButtonOk.setRequestFocusEnabled(false);
			jButtonOk.setBounds(73, 76, 105, 26);
			jButtonOk.setText("   Ok       ");
			jButtonOk.setIcon(new ImageIcon("C:/ISHistorico/images/icons/20x20/Save.gif"));
			
			jButtonOk.addActionListener(new java.awt.event.ActionListener() { 
				public void actionPerformed(java.awt.event.ActionEvent e) { 
					 
		                try {
		                	ProgramasDaoImpl<Programa> dao = new ProgramasDaoImpl<Programa>();
		                	JPanelSpEditDescricaoPrograma spDesc = new JPanelSpEditDescricaoPrograma();
		                			String a = jMaxLenTextFieldNome.getText();
		                			if (!jMaxLenTextFieldNome.getText().trim().equals("") && jNumberTextFieldProgId.getNumber().intValue() > 0 ){
		                				if (comparaProgId(jNumberTextFieldProgId.getNumber().intValue())){
		                					JOptionPane.showMessageDialog(null, "ProgId ja cadastrado!");
		                				}else{
		                			prog.setNomePrograma(jMaxLenTextFieldNome.getText()); 
		                			prog.setProgId(jNumberTextFieldProgId.getNumber().intValue());
		                			prog.setModulo(jComboBoxModulo.getSelectedIndex());
		                			prog.setDescricao(descricao);
		                			prog.setDescricao(spDesc.getDesc());
		                			if (alterar){
		                				dao.update(prog);
		                			}else {
		                				dao.create(prog);
		                				
		                			}
		                			limpar(); }
		                			
		                }else {
		                	JOptionPane.showMessageDialog(null, "Todos os campos devem ser informados");
		                }
		                		
		                }
		                catch (Exception ei){
		                	ei.printStackTrace();
		                }
				}
			});
		}
		return jButtonOk;
	}
	
	
	private JButton getJButtonDescricao() {
		if (jButtonDescricao == null) {
			jButtonDescricao = new JButton();
			jButtonDescricao.setRequestFocusEnabled(false);
			jButtonDescricao.setBounds(209, 76, 105, 26);
			jButtonDescricao.setText("Descrição");
			jButtonDescricao.addActionListener(new java.awt.event.ActionListener() { 
				public void actionPerformed(java.awt.event.ActionEvent e) {    
					try {
						if (alterar){
							new JPanelSpEditDescricaoPrograma(msg).setVisible(true);
						}else {
							new JPanelSpEditDescricaoPrograma().setVisible(true);
						}
					}catch (Exception ei){
						ei.printStackTrace();
						}
					}
			}); 
		}
		return jButtonDescricao;
	}
	
	public void fechar(){
		this.setVisible(false); 
	}
	
	public void limpar(){
		jMaxLenTextFieldNome = null;
		jNumberTextFieldProgId = null;
		this.setVisible(false);
		
		
	}
	
	public  JScrollPane instanciaComponentes() { 
		
		model.addTableModelListener(this);
		model.adicionaLista(ProgramasDaoImpl.listarHistoricosProgramas(progId));
		
		jtable.setModel(model);
		scrollPane = new JScrollPane();
		scrollPane.setViewportView(jtable);
		
		jtable.setSize(new Dimension(241, 101));
		scrollPane.setBounds(4, 111, 616, 413);
		jtable.getColumnModel().getColumn(0).setMaxWidth(65);
		jtable.getColumnModel().getColumn(1).setMaxWidth(65);
		jtable.getColumnModel().getColumn(2).setMaxWidth(95);
		jtable.getColumnModel().getColumn(3).setMaxWidth(65);
		jtable.getColumnModel().getColumn(4).setMaxWidth(330);
		//jtable.repaint();
		return scrollPane;
		
	}
	
	public void refreshTable(ProgramaHistorico prog){
		//model.adicionaLista(ProgramasDaoImpl.listarHistoricosProgramas(progId));
	  	model.adiciona(prog,prog.getProgId());
		jtable.setModel(model);
		jtable.repaint();
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
		prog.setDescricao(descricao);
		}
	
	public String getDescricao() {
		return descricao;
	}
	
	
	public void tableChanged(TableModelEvent arg0) {
		// TODO Auto-generated method stub
		
	}
	
	public boolean comparaProgId(int progId){
		ProgramasDaoImpl<Programa> dao = new ProgramasDaoImpl<Programa>();
		List<Programa> list = dao.loadProgramaByProgId(progId);
		if (list.size() > 0){
			return true;
		}else {
			return false;
		}
	}
}

Estranho pq quando tudo está correto, não é necessário fazer repaint, refresh ou qualquer coisa desse tipo. Basta disparar os eventos do model, e a própria table se encarregará de se repintar.

pois é e os valores estão no model, isto é…ele atualiza certinho…será que não teria uma forma de dar um “refresh” no proprio frame? e ele re-fazer a table?

Estranho, pq não existe necessidade de refresh em lugar nenhum. Geralmente, situações assim aconteciam quando algum componente disparava uma exceção durante a pintura, o que impedia a JTable de fazer o refresh correto.