Nome das colunas nao aparece no JTable

6 respostas
R

Ainda não descobri porque o nome das colunas não estão aparecendo na minha JTable. Vou colocar o código do TableModel. Agradeço antecipadamente quem conseguir descobrir o problema.

public class TableModelOrcamento extends TableModelPadrao {
	
	private List<Orcamento> orcamentos;
	
	public int getRowCount() {
		return orcamentos.size();
	}

	public Object getValueAt(int rowIndex, int columnIndex) {
		switch (columnIndex) {
			case 0: return orcamentos.get(rowIndex).getData(); 
			case 1: return orcamentos.get(rowIndex).getValorTotal();
			default: return null;
		} 
	}

	public void setOrcamentos(List<Orcamento> orcamentos) {
		this.orcamentos = orcamentos;
	}

	public List<Orcamento> getOrcamentos() {
		return orcamentos;
	}

	@Override
	protected String[] criarColunas() {
		return new String[]{"Data", "Total"};
	}

}

public abstract class TableModelPadrao extends AbstractTableModel {
	
	protected String[] colunas;
	
	public TableModelPadrao() {
		setColunas(criarColunas());
	}
	
	public int getColumnCount() {
		return colunas.length;
	}	
	
	public boolean isCellEditable(int row, int col) {
		return false;
    }	
	
    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }		
	
	public String getColumnName(int col){
		return colunas[col];
	}

	public String[] getColunas() {
		return colunas;
	}
	
	public void setColunas(String[] colunas) {
		this.colunas = colunas;
	}
	
	protected abstract String[] criarColunas();
		
}

6 Respostas

B

vc está adicionando sua JTable dentro de um JScrollPane ?

TableModel m = new DefaultTableModel();
JTable t = new JTable(m);
JScrollPane p = new JScrollPane(t);
contentPane.add(p);
R

Sim, estou.

private JComponent construirPainelCentral() { JTable tabela = new JTable(this.tableModel); JScrollPane scrollpane = new JScrollPane(tabela); tabela.setPreferredSize(new Dimension(600,480)); return tabela; }

R

Oi, realmente estava errado. Obrigado.
Fiz essa correção:

private JComponent construirPainelCentral() { JTable tabela = new JTable(this.tableModel); tabela.setPreferredSize(new Dimension(600,480)); JScrollPane scrollpane = new JScrollPane(tabela); return scrollpane; }

R

Mas não entendi o por que disso. Qual o problema em não adicionar o JscrollPane com o nome das colunas? É obrigatório a inclusão do JscrollPane?

B

O JScrollPane serve pra mostrar uma parte de um componente grande, gernciando bem legal a parte de renderização e utilização da memoria. Quando vc usa a Jtable, o scrollpane controla a vizualização da jtable ( linhas e colunas ). Logo, sobra para o scrollpane cotrolar tambem o header ( nome das colunas ).
Fica meio que obrigatorio o uso da JTable dentro de um JScrollPane.
Experimente criar um JPanel e usar o JScrollPane para exibi-lo num espaço menor do que o proprio pane criado ( aka colocar scrollbar para rolar a tela para baixo ).

retirado do javadoc:

C

Valeu galera, não foi eu que postei esta discursão mas me ajudou muito, obrigadooooooo.

Criado 23 de março de 2005
Ultima resposta 21 de jun. de 2011
Respostas 6
Participantes 3