Modelo de Tabela não constrói corretamente

4 respostas
H

Pessoa, estava pesquisando sobre JTableModel e estava fazendo este código:

package view;

import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;

import model.Contato;

@SuppressWarnings("serial")
public class TabelaPadrao extends AbstractTableModel {

	private String[] colunas;
	private ArrayList lista;
	

	public TabelaPadrao(ArrayList dados, String[] colunas) {
		setLista(dados);
		setColunas(colunas);
	}

	public ArrayList getLista() {
		return lista;
	}

	public void setLista(ArrayList lista) {
		this.lista = lista;
	}

	public String[] getColunas() {
		return colunas;
	}

	public void setColunas(String[] colunas) {
		this.colunas = colunas;
	}

	@Override
	public int getColumnCount() {
		return colunas.length;
	}

	@Override
	public int getRowCount() {
		return lista.size();
	}

	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		// Obtem a linha, que é uma String []  
                //Dá um erro nesta linha, falando que "Contato" não pode ser convertido para String
		String [] linha = (String [])getLista().get(rowIndex);  
        // Retorna o objeto que esta na coluna  
        return linha[columnIndex]; 
	}

}

Mas ele apresenta dois erros críticos:

1- Ele não consegue colocar os títulos da tabela. Ficam apenas A, B, C, D, E respectivamente para cada coluna.

2- Ele não consegue converter o ArrayList do objeto contato para um vetor, como posso resolver isso?

Obrigado pela ajuda, pessoal! :smiley:

4 Respostas

Marlon_Meneses

pra mostrar o nome da coluna, tem que sobscrever o metodo getColumnName e o metodo getValueAt esta implementado errado
fiz um exemplo certa vez que pode ser útil

http://www.guj.com.br/java/257942-pintar-determinadas-linhas-jtable#1345267

H

Obrigado, Marlon, consegui colocar os nomes nas colunas.

Porém, ainda não entendi por que o método getValueAt está implementado errado, podería me explicar?

public Object getValueAt(int rowIndex, int columnIndex) {
		 // Obtem a linha, que é uma String []  
	    String [] linha = (String [])getLista().get(rowIndex);  
	    // Retorna o objeto que esta na coluna  
	    return linha[columnIndex];  
    }

Ele está lançando um ClassCastException na linha da atribuição da linha.

H

Marlon, resolvi o problema do seguinte modo:

public String getValueAt(int rowIndex, int columnIndex) { Contato contato = (Contato) getLista().get(rowIndex); switch (columnIndex) { case 0: { return contato.getId(); } case 1: { return contato.getNome(); } case 2: { return contato.getTelefone(); } case 3: { return contato.getEmail(); } default: { return "Erro"; } } }

Agora está funcionando perfeitamente, mas creio que eu tirei um pouco a funcionalidade do model, agora ele não serve como modelo para qualquer tabela, apenas para a tabela de contato com 4 campos, ou estou errado?

Marlon_Meneses

isso mesmo
o ideal eh isso mesmo, ter um modelo pra cada tabela
pode dar um pouco de trabalho mas vale a pena pq fica mais organizado

Criado 16 de novembro de 2011
Ultima resposta 16 de nov. de 2011
Respostas 4
Participantes 2