gente,
Vamo parar com essa bobeira de usar DefaultTableModel, realmente… eu usei uma vez, o vinny me passou uns links para estudar… Peguei um modelo pronto e comecei a usar… NUNCA mais parei… então vamos ao passo-a-passo?
PRIMEIRA COISA: você deve criar uma classe no seu projeto para ser a classe do modelo… Para fazer isso, basta você adaptar o seguinte código:
[code]package regra;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
public class ClienteTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
/* Lista de Cliente que representam as linhas. */
private List<Cliente> linhas;
/* Array de Strings com o nome das colunas. */
private String[] colunas = new String[]{
"Nome","Endereço", "Telefone"};
/* Cria um ClienteTableModel vazio. */
public ClienteTableModel() {
linhas = new ArrayList<Cliente>();
}
/* Cria um ClienteTableModel carregado com
* a lista de Cliente especificada. */
public ClienteTableModel(List<Cliente> listaDeCliente) {
linhas = new ArrayList<Cliente>(listaDeCliente);
}
/* Retorna a quantidade de colunas. */
@Override
public int getColumnCount() {
// Está retornando o tamanho do array "colunas".
return colunas.length;
}
/* Retorna a quantidade de linhas. */
@Override
public int getRowCount() {
// Retorna o tamanho da lista de Cliente.
return linhas.size();
}
@Override
public String getColumnName(int columnIndex) {
// Retorna o conteúdo do Array que possui o nome das colunas
return colunas[columnIndex];
}
;
@Override
public Class<?> getColumnClass(int columnIndex) {
return String.class;
}
;
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Cliente cliente = linhas.get(rowIndex);
// Retorna o campo referente a coluna especificada.
// Aqui é feito um switch para verificar qual é a coluna
// e retornar o campo adequado. As colunas sãoas mesmas
// que foram especificadas no array "colunas".
switch (columnIndex) {
// Seguindo o exemplo: "Tipo","Data de Cadastro", "Nome", "Idade"};
case 0:
return cliente.getNome();
case 1:
return cliente.getEndereco();
case 2:
return cliente.getTel();
default:
// Isto não deveria acontecer...
throw new IndexOutOfBoundsException("columnIndex out of bounds");
}
}
@Override
//modifica na linha e coluna especificada
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
Cliente cliente = linhas.get(rowIndex); // Carrega o item da linha que deve ser modificado
switch (columnIndex) { // Seta o valor do campo respectivo
case 0:
cliente.setNome(aValue.toString());
case 1:
cliente.setEndereco(aValue.toString());
case 2:
cliente.setTel(aValue.toString());
default:
// Isto não deveria acontecer...
}
fireTableCellUpdated(rowIndex, columnIndex);
}
//modifica na linha especificada
public void setValueAt(Cliente aValue, int rowIndex) {
Cliente cliente = linhas.get(rowIndex); // Carrega o item da linha que deve ser modificado
cliente.setNome(aValue.getNome());
cliente.setEndereco(aValue.getEndereco());
cliente.setTel(aValue.getTel());
fireTableCellUpdated(rowIndex, 0);
fireTableCellUpdated(rowIndex, 1);
fireTableCellUpdated(rowIndex, 2);
}
;
;
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
public Cliente getCliente(int indiceLinha) {
return linhas.get(indiceLinha);
}
/* Adiciona um registro. */
public void addCliente(Cliente m) {
// Adiciona o registro.
linhas.add(m);
int ultimoIndice = getRowCount() - 1;
fireTableRowsInserted(ultimoIndice, ultimoIndice);
}
/* Remove a linha especificada. */
public void removeCliente(int indiceLinha) {
linhas.remove(indiceLinha);
fireTableRowsDeleted(indiceLinha, indiceLinha);
}
/* Adiciona uma lista de Cliente ao final dos registros. */
public void addListaDeCliente(List<Cliente> cliente) {
// Pega o tamanho antigo da tabela.
int tamanhoAntigo = getRowCount();
// Adiciona os registros.
linhas.addAll(cliente);
fireTableRowsInserted(tamanhoAntigo, getRowCount() - 1);
}
/* Remove todos os registros. */
public void limpar() {
linhas.clear();
fireTableDataChanged();
}
/* Verifica se este table model esta vazio. */
public boolean isEmpty() {
return linhas.isEmpty();
}
}
[/code]
SEGUNDA COISA: criar um atributo do tipo do modelo na janela em que a jtable existe:
TERCEIRA COISA: no construtor da janela você vai adicionar o modelo: eis o exemplo:
public Jan_Principal() {
super("Título da janela");
initComponents();
setLocationRelativeTo(null); //janela fica no centro da tela ao ficar visível...
//Adicionando os modelos das tabelas
modelo = new ClientesTableModel();
tabela_Exemplo.setModel(modelo);
}
QUARTA COISA: na hora de adicionar algum “Cliente” no caso na tabela basta fazer:
modelo.addClientes(objetoDoCliente);
abraços!
Espero que possa ajudar alguem!