Salve galera do GUJ!
Estou trabalhando com JTable em minha aplicação, li alguns posts sobre AbstractTableModel indicados pelo ViniGodoy em sua campanha “morte ao DefaultTableModel”, peguei um deles como exemplo para o meu modelo http://www.guj.com.br/java/225793-exemplo-de-tablemodel#1156821.
Agora tenho algumas dúvidas:
1- Eu tenho um String[] colunas com os nomes das minhas colunas. Como fazer com que esses nomes apareçam na primeira linha de minha tabela(titulo das colunas)?
2- Quando eu carrego a tabela com os dados e dou 2 clicks para editar a célula, quando clico fora para finalizar a edição, aquele valor é copiado para todas as células a direita(na mesma linha) é um comportamento muito bizarro. Por que acontece e como resolver?
3- Como definir a largura das colunas? usei o método abaixo, mas ele não obedece a minha vontade(deve ser revoltadinho, coitado).
Quem puder me ajudar com qualquer dúvida ficarei muito agradecido. Abaixo segue minha classe AbstractTableModel.
[code]public class ClienteTableModel extends AbstractTableModel {
private ArrayList linhas;
private String[] colunas = new String[] { “CODIGO”, “NOME”, “RG”, “CPF”, “TELEFONE”, “AVALIACAO” };
public ClienteTableModel() {
linhas = new ArrayList<Clientes>();
}
public ClienteTableModel(ArrayList<Clientes> lista) {
linhas = new ArrayList<Clientes>(lista);
}
/* Retorna a quantidade de colunas. */
@Override
public int getColumnCount() {
// Está retornando o tamanho do array "colunas".
return colunas.length;
}
/* 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) {
return String.class;
}
/* Retorna a quantidade de linhas. */
@Override
public int getRowCount() {
// Retorna o tamanho da lista de Clientes.
return linhas.size();
}
/* Retorna o valor da celula especificada pelos indices da
* linha e da coluna.*/
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Clientes 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ão as mesmas
// que foram especificadas no array "colunas".
switch (columnIndex) {
case 0: // Primeira coluna é o codigo.
return cliente.getCodigo();
case 1: // Segunda coluna é o nome.
return cliente.getNome();
case 2: // Terceira coluna é o RG.
return cliente.getRG();
case 3: // Querta coluna é o CPF.
return cliente.getCPF();
case 4: // Quinta coluna é o telefone.
return cliente.getTelefone();
case 5: // Sexta coluna é a avaliacao.
return cliente.getAvaliacao();
default:
// Se o índice da coluna não for válido, lança um
// IndexOutOfBoundsException (Exceção de índice fora dos limites).
// Não foi necessário verificar se o índice da linha é inválido,
// pois o próprio ArrayList lança a exceção caso seja inválido.
throw new IndexOutOfBoundsException("columnIndex out of bounds");
}
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex){
//pega o produto da linha
Clientes cliente = linhas.get(rowIndex);
//verifica qual valor vai ser alterado
switch (columnIndex) {
case 0: // Primeira coluna é o codigo.
cliente.setCodigo(Long.parseLong(aValue.toString()));
case 1: // Segunda coluna é o nome.
cliente.setNome(aValue.toString());
case 2: // Terceira coluna é o RG.
cliente.setRG(aValue.toString());
case 3: // Querta coluna é o CPF.
cliente.setCPF(Long.parseLong(aValue.toString()));
case 4: // Quinta coluna é o telefone.
cliente.setTelefone(Long.parseLong(aValue.toString()));
case 5: // Sexta coluna é a avaliacao.
cliente.setAvaliacao(aValue.toString().charAt(0));
}
//avisa que os dados mudaram
fireTableDataChanged();
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
//no nosso caso todas vão ser editáveis, entao retorna true pra todas
return true;
}
public void setLinhas(ArrayList<Clientes> linhas) {
this.linhas = linhas;
}
}[/code]