[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