Problemas com JTable

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, chamar o método “adiciona” do meu model e o repaint e nenhum deles funcionou, continua o mesmo problema.

esse é meu TableModel


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;
	}
	
	  @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);
	}
	
	

}

e chamo o metodo adiciona aqui…


	public void refreshTable(ProgramaHistorico prog){
		model.adiciona(prog,prog.getProgId());
		instanciaComponentes();
		jtable.repaint();
	}

espero que alguem possa me ajudar…ate mais

Voce pode criar um método que preenche a tabela, usando setModel, e formatá-lo.

Aí sempre que voce inserir ou excluir, voce chama esse método novamente.

Att.

esse metodo ja existe…ele é o fireTableRowsInserted q informa listener sempre que ha alteração na tabela…só que ele não esta funcionando…

Posta aí o código todo que usa o model.

Mas faz assim, posta no seu tópico original, pq não é certo duplicar tópicos:
http://www.guj.com.br/posts/list/201427.java