Cabeçalho JTable não mostra a string

4 respostas
F

Boa noite pessoal, estou tendo dificuldades com o componente JTable e apesar de ja ter lido diversos tópicos sobre o assunto aqui no Guj e inclusive o tutorial do site (foi de la que tirei o exemplo), não consigo resolver o problema.

Segue a minha classe SimpleTableModel que como muitos já devem ter visto é igual a do exemplo do site:

import java.util.*;
import javax.swing.table.*;


public class SimpleTableModel extends AbstractTableModel {
	
	private ArrayList linhas = null;
	private String [] colunas = null;
	private boolean [] colsEdicao;
	
	public String[] getColunas() {
		return colunas;	
	}
	
	public ArrayList getLinhas() {
		return linhas;
	}
	
	public void setColunas(String[] strings) {
		colunas = strings;
	}
	
	public void setLinhas(ArrayList list) {
		linhas = list;
	}
	
	public int getColumnCount() {
		return getColunas().length;
	}
	
	public int getRowCount() {
		return getLinhas().size();
	}
	
	public Object getValueAt(int rowIndex, int columnIndex) {
		String [] linha = (String [])getLinhas().get(rowIndex);
		return linha[columnIndex];
	}
	
	public boolean isCellEditable(int row, int col) {
		return colsEdicao[col];
	}
	
	public void setValueAt(Object value, int row, int col) {
		String [] linha = (String[])getLinhas().get(row);
		linha[col] = (String)value;
		fireTableCellUpdated(row,col);
	}
	
	public SimpleTableModel(ArrayList dados, String[] colunas, boolean [] edicao) {
		setLinhas(dados);
		setColunas(colunas);
		colsEdicao = edicao;
	}
}

E este é o meu método que cria o objeto JTable e o retorna:

public JTable tabela() {
		ArrayList dados = new ArrayList();
		String[] colunas = new String[] {"Part Number", "Descrição", "Quantidade", "Unidade", "Fator de Refugo"};
		dados.add(new String[] {"Teste", "Teste", "Teste", "Teste", "Teste"});
		boolean[] edicao = {false,true};
		SimpleTableModel modelo = new SimpleTableModel(dados, colunas, edicao);
		System.out.println(colunas);
		JTable table = new JTable(modelo);
		table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		return table;
	}

O meu problema é que quando a tabela é montada e exibida o cabeçalho dela me mostra apenas A B C D E ao invés de mostra o que a string colunas contem.
Como podem ver um teste colocando o System.out.println da string colunas e o resultado que obtive foi:

[Ljava.lang.String;@e89b94

Acredito que o problema esteja aqui, pois entendo que isso não passa de uma referência de onde a string esteja, portanto a JTable está tentando adicionar esta referência ao cabeçalho e não o conteúdo da string. Como posso resolver?
Pensei e fazer um laço percorrer posição por posição do array e adicionar coluna por coluna mas não me parece ser a solução mais apropriada.

Obrigado pela ajuda.

4 Respostas

jonataa

Olá Fernando,

estava com o mesmo problema que o seu. Coloca essa função na sua classse SimpleTableModel que vai funcionar.

public String getColumnName(int column){ return getColunas()[column]; }

ViniGodoy

Para entender melhor, dê uma lida nesse tópico:
http://www.guj.com.br/posts/list/132698.java#714736

Marky.Vasconcelos

Me desculpe mas seu JTable é uma copia do DefaultTableModel.
Veja o link que o ViniGodoy postou.

M

Mark_Ameba:
Me desculpe mas seu JTable é uma copia do DefaultTableModel.
Veja o link que o ViniGodoy postou.

E usar DefaultTableModel é problema por causa disso.

Outro exemplo de seu próprio TableModel aqui: http://www.guj.com.br/posts/list/149034.java#808003

Criado 15 de setembro de 2009
Ultima resposta 5 de fev. de 2010
Respostas 4
Participantes 5