[Resolvido]Não consigo adicionar Colunas em minha JTable

5 respostas
M

Olá pessoal, estou usando AbstractTableModel para pareencher minha JTable. Quero adicionar 4 colunas em minha JTable, mas quando executo aparece apenas as linhas.

package util;

import java.util.ArrayList;
import java.util.List;

import javax.swing.table.AbstractTableModel;
import bean.Filme;

public class FilmeTableModel extends AbstractTableModel {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	// constantes que vão representar as colunas
	// (só para facilitar o entendimento do código)
	private final int COL_FILME = 0;
	private final int COL_DESC = 1;
	private final int COL_GENERO = 2;
	private final int COL_SITUACAO = 3;

	private List<Filme> filmes;
	private String[] colunas;

	public FilmeTableModel(ArrayList<Filme> filmes, String[] colunas) {
		setLinhas(filmes);  
	    setColunas(colunas);  
	}

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

	public void setLinhas(ArrayList list) {
		filmes = list;
	}

	@Override
	public int getRowCount() {
		// cada filme na lista será uma linha
		return filmes.size();
	}

	@Override
	public int getColumnCount() {
		// 4 colunas = filme, descrição, genero e situação
		return 4;
	}

	public String getColumnName(int column) {
		switch (column) {
		case 0:
			return "Filme";
		case 1:
			return "Descrição";
		case 2:
			return "Genêro";
		case 3:
			return "Situação";
		}
		return "";
	}

	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		// pega o filme da linha
		Filme f = filmes.get(rowIndex);

		// verifica qual valor deve ser retornado
		switch (columnIndex) {
		case 0:
			return f.getC_nome();
		case 1:
			return f.getC_descricao();
		case 2:
			return f.getC_genero();
		case 3:
			return f.getF_situacao();
		}
		return "";
	}

	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
		// pega o filme da linha
		Filme f = filmes.get(rowIndex);

		// verifica qual valor deve ser alterado
		switch (columnIndex) {
		case 0:
			f.setC_nome(aValue.toString());
			break;
		case 1:
			f.setC_descricao(aValue.toString());
			break;
		case 2:
			f.setC_genero(aValue.toString());
			break;
		case 3:
			f.setF_situacao(aValue.toString());
		}

		// avisa que os dados mudaram
		fireTableDataChanged();
	}

	public boolean isCellEditable(int rowIndex, int columnIndex) {
		// nao vai ser editável
		return false;
	}

}
public void preencherTabela(){
		FilmeTableModel modelo;
		String[] colunas = new String[]{"Filme","Descrição","Genêro","Situação"};
		ArrayList<Filme> filmes = new ArrayList<Filme>();
		FilmeDAO filmeDAO = new FilmeDAO();
		try {
			filmes = filmeDAO.consultarFilme();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	
		modelo = new FilmeTableModel(filmes,colunas);
		tableFilme.setModel(modelo);
	}

Toda vez que executo minha aplicação tenho apenas as linhas. Por quê isto está acontecendo?

5 Respostas

mauricioadl

coloca no construtor da sua classe de modelo um super(colunas, linhas);

M
public FilmeTableModel(ArrayList filmes, String[] colunas) {
		super(filmes,colunas);
		setLinhas(filmes);  
	    setColunas(colunas);  
	}

Eu tentei, mas ele diz que não tem um construtor para ArrayList,String[].

mauricioadl

falei bobeira mesmo, confundi abstracttablemodel com defaulttablemodel.

sorry!

Eric_Yuzo

Esse negócio de passar array de Strings com o nome das colunas é coisa do DefaultTableModel. Inclusive o atributo “colunas” nem está sendo utilizado no seu modelo. Portanto seu modelo deveria estar recebendo apenas a lista de filmes pelo construtor.

Quanto as colunas não estarem aparecendo, você quer dizer o título das colunas? Se for, adicione a JTable em um JscrollPane que os títulos devem aparecer.

M

Eric Yuzo:
Esse negócio de passar array de Strings com o nome das colunas é coisa do DefaultTableModel. Inclusive o atributo “colunas” nem está sendo utilizado no seu modelo. Portanto seu modelo deveria estar recebendo apenas a lista de filmes pelo construtor.

Quanto as colunas não estarem aparecendo, você quer dizer o título das colunas? Se for, adicione a JTable em um JscrollPane que os títulos devem aparecer.

Muito obrigado, funcionou perfeitamente.

Criado 15 de novembro de 2011
Ultima resposta 15 de nov. de 2011
Respostas 5
Participantes 3