Como Atualizo JTable dinamicamente? [RESOLVIDO]

[quote]

Caros, boa tarde.

De tanto ouvir falar (pelo Vini, Mark e outros) de “morte ao DefaultTableModel”, eu implementei o modelo que estou usando e confesso ficou muito mais fácil.
Estou com uma dúvida e os meus professores são os “experts” aqui do GUJ e por isso a vocês venho recorrer.
Já pesquisei mas sem êxito, por falta de experiência, pois sou iniciante em programação.
Abaixo o código que uso em TableModel e preciso atualizá-la em tempo de execução: ao alterar, excluir, adicionar.
Conto com a ajuda daqueles que, como eu, já tiveram esse problema.
Antecipadamente agradeço a todos.
Pedro

[quote]

public class ControleTableModel extends AbstractTableModel {    
        
	/* Lista de Contatos que representam as linhas. */
	private List<Controle> linhas;       

	/* Array de Strings com o nome das colunas. */
	private String[] colunas = new String[] {
			"Autorizo", "Edição", "Nome do Cliente", "Cidade", 
                        "Endereço", "Setor"};
        
	/* Cria um ContatoTableModel vazio. */
	public ControleTableModel() {
		linhas = new ArrayList<Controle>();
	}
        
	/* Cria um ContatoTableModel carregado com
	 * a lista de contatos especificada. */
	public ControleTableModel(List<Controle> listaDeContatos) {
		linhas = new ArrayList<Controle>(listaDeContatos);
	}
        
	/* Retorna a quantidade de colunas. */
	@Override
	public int getColumnCount() {

		return colunas.length;
	}
        
	/* Retorna a quantidade de linhas. */
	@Override
	public int getRowCount() {
		// Retorna o tamanho da lista de contatos.
		return linhas.size();
	}
        
	/* Retorna o nome da coluna no índice especificado.
	 * Este método é usado pela JTable para saber o texto do cabeçalho. */
	@Override
	public String getColumnName(int columnIndex) {
		/* Retorna o conteúdo do Array que possui o nome das colunas
		 * no índice especificado.*/
		return colunas[columnIndex];
	};
        
	/* Retorna a classe dos elementos da coluna especificada.
	 * Este método é usado pela JTable na hora de definir o editor da célula. */
	@Override
	public Class<?> getColumnClass(int columnIndex) {

		switch (columnIndex) {
		case 0: 
			return String.class;
		case 1: 
			return String.class;
                case 2:
			return String.class;
                case 3:
			return String.class;
                case 4:
			return String.class;
                case 5:
			return String.class;

		default:

			throw new IndexOutOfBoundsException("columnIndex out of bounds");
		}
	}
        
	/* Retorna o valor da célula especificada
	 * pelos índices da linha e da coluna. */
	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		// Pega o contato da linha especificada.
		Controle controle = linhas.get(rowIndex);

		switch (columnIndex) {
		case 0: 
			return controle.getAutorizo();
		case 1: 
			return controle.getEdicao();
                case 2: 
			return controle.getNomeCliente();
                case 3: 
			return controle.getNomeCidade();
                case 4: 
			return controle.getEndereco();                    
                case 5: 
			return controle.getBairro();

		default:

			throw new IndexOutOfBoundsException("columnIndex out of bounds");
                  
		}                
	}

        @Override
	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {};

	@Override
	public boolean isCellEditable(int rowIndex, int columnIndex) {
		return false;
	}

	/* Retorna o contato da linha especificada. */
	public Controle getControle(int indiceLinha) {
                       
            modelo.ConnectionDataBase.getConnection();
            ConnectionDataBase modelo = new ConnectionDataBase();
                    
		return linhas.get(indiceLinha);
	}
	
	/* Adiciona um registro. */
	public void addControle(Controle controle) {
		// Adiciona o registro.
		linhas.add(controle);                

		int ultimoIndice = getRowCount() - 1;

		fireTableRowsInserted(ultimoIndice, ultimoIndice);
	}
        
	public void addItem(Controle controle) {
		this.linhas.add(controle);                
		this.fireTableDataChanged();

	} 
        
	/* Remove a linha especificada. */
	public void removeControle(int indiceLinha) {
		// Remove o contato da linha especificada.    	
		linhas.remove(indiceLinha);

		fireTableRowsDeleted(indiceLinha, indiceLinha);
	}
        
	/* Adiciona uma lista de contatos ao final dos registros. */
	public void addListaDeControles(List<Controle> controles) {
		// Pega o tamanho antigo da tabela.
		int tamanhoAntigo = getRowCount();
                
		// Adiciona os registros.
		linhas.addAll(controles);

		fireTableRowsInserted(tamanhoAntigo, getRowCount() - 1);
	}

	/* Remove todos os registros. */
	public void limpar() {
		// Remove todos os elementos da lista de contatos.
		linhas.clear();

                fireTableStructureChanged();
	}
        
	/* Verifica se este table model está¡ vazio. */
	public boolean isEmpty() {
		return linhas.isEmpty();
	}
}

Bem, como não obtive resposta para sanar a minha dúvida, depois de muito pesquisar encontrei a biblioteca “DbUtils” que me resolveu o problema. Não sei se é o modo correto, porém foi a solução que encontrei. Grato a todos. Pedro

Penso que ao inserir o item chame novamente essa ação só limpe a jtable antes.