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.