Erro ao popular Table model Netbeans

3 respostas
B

Boa noite

Estou com um problema tenho uma Jtable e não consigo colocar o nome das colunas

Desenvolvo no dia a dia para a web e só desenvolvi desktop na faculdade, portanto não tenho experiência em swing por isso usei para este projeto o gerador de interfaces do Netbeans.

A parte difícil da tarefa eu ja fiz que é passar uma list de objetos e popular os campos da Jtable.

Porém não consigo colocar o cabeçalho da tabela.

Já procurei e ja usei diversos tutoriais da internet e não consigo colocar o cabeçalho da tabela.

Segue o código

Código de instanciação do Jtable(gerado pelo Netbeans)

Onde tentei personalizar e inserir o cabealho

ResultadoFatorado = new javax.swing.JTable();

ResultadoFatorado.setModel(new javax.swing.table.DefaultTableModel(
    new String [][] {
        { "", "" }
    },
    new String [] {
        "Espessura Concreto", "Tamanho parede Mt's"
    }
));
scrollPane1.add(ResultadoFatorado);

Código onde populo o Jtable(O retorno do lista sai perfeito na tabela)

private void MostraResultado(List<Barreira> Barreiras) {
        String[] columnNames = { "Espessura Concreto.","Tamanho Barreira (Mt's)"};
        Object[][] data = {,};
        ResultadoFatorado.setModel(new javax.swing.table.DefaultTableModel(data, columnNames) {} );
        DefaultTableModel dtm = (DefaultTableModel)ResultadoFatorado.getModel();
            for (Object o : Barreiras) {
                Barreira barreira = (Barreira) o;
                dtm.addRow(new Object[]{barreira.getGramatura(),barreira.getTamanho()});
            }
        }

O que falta para aparecer o cabeçalho da tabela.

Muito Obrigado.

3 Respostas

W

Boa noite Bordes,

Veja se lhe ajuda … eu criei esta classe para manipular meus JTables e não tenho problemas!!! Veja o método configurarTabela(String[] rotulo) onde faço a definição dos rótulos.

public class manipulaJTable {
    DefaultTableModel modelo;
    JTable tabela;
    ResultSet rs;
    
    public manipulaJTable(JTable table) {
        setJTable(table);                
        modelo = (DefaultTableModel) this.tabela.getModel();
    }
    
    public final void setJTable(JTable table) {
        this.tabela = table;                
    }
    
    public void configurarTabela(String[] rotulo) {        
        modelo.setNumRows(0);
        modelo.setColumnIdentifiers(rotulo);            <------------------- Aqui é configurado o título/rótulo das colunas
    }
      
    public void configuraLarguraColunas(int[] largura) {
        for(int i=0; i < largura.length;i++) {
            this.tabela.getColumnModel().getColumn(i).setPreferredWidth(largura[i]);            
        }
    }

    public void preencherTabela(ResultSet rs, Object[] dados ) {
        modelo.addRow(dados);        
    }    
    
    public void limparTabela() {
        modelo.setNumRows(0);
    }
    
    public void removerColuna(int coluna) {
        tabela.getColumnModel().removeColumn(tabela.getColumnModel().getColumn(coluna));
    }    
}
mauricioadl

DefaultTableModel modelo = new DefaultTableModel(null, new Object[]{"COLUNA1 ", "COLUNA2 ", "COLUNA3 "}); JTable tabela = new JTable(modelo);

T

Cara eu sugiro que você trabalhe com AbstractTableModel...nela vc pode trabalhar com seus objetos e basta vc sobrescrever um metodo que ele adicionará os nomes das colunas que vc quer....existe tb alguns topicos neste forum.
vou adicionar aqui uma classe que criei...

public class TabelaTableModel extends AbstractTableModel {

    private List<Tabela> linhas;
    private String[] colunas = {"Tabelas"};

    public TabelaTableModel() {
        this.linhas = new ArrayList<Tabela>();
        this.colunas = new String[]{"Tabelas"};
    }

    public TabelaTableModel(String[] coluna, List<Tabela> linhas) {
        this.linhas = linhas;
        this.colunas = coluna;
    }
    
    public TabelaTableModel(List<Tabela> tabela){
        this.linhas = tabela;
        this.colunas = new String[] {"Tabelas"};
    }

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

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

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Tabela tabela = this.linhas.get(rowIndex);

        switch (columnIndex) {
            case (0):
                return tabela.getDescricao();
            case (1):
                return tabela.getNome();
            case (2):
                return tabela.getSchema();
            default:
                throw new IndexOutOfBoundsException("columnIndex out of bounds");
        }
    }
    
    @Override
    public String getColumnName(int column){
        
        return this.colunas[column];
    }
    
    @Override
    public boolean isCellEditable(int row, int col) {

      if (col < 2) {
        return false;
      } else {
        return true;
      }
    }
    
    @Override
    public Class getColumnClass(int c) {
      return getValueAt(0, c).getClass();
    }

    public Tabela getTabela(int rowIndex) {
        return this.linhas.get(rowIndex);
    }

    /**
     * Adiciona um registro no JTable da Classe Tabela
     * @param tabela 
     */
    public void addTabela(Tabela tabela) {
        // Adiciona o registro.
        linhas.add(tabela);

        // Pega a quantidade de registros e subtrai um para achar
        // o último índice. � preciso subtrair um, pois os índices
        // começam pelo zero.
        int ultimoIndice = getRowCount() - 1;

        // Reporta a mudança. O JTable recebe a notificação
        // e se redesenha permitindo que visualizemos a atualização.
        fireTableRowsInserted(ultimoIndice, ultimoIndice);
    }
    
        /**
     * Adicional toda uma lista de Tabela
     * @param lista 
     */
    public void addListaTabela(List<Tabela> lista) {
        // Pega o tamanho antigo da tabela.
        int tamanhoAntigo = getRowCount();

        // Adiciona os registros.
        this.linhas.addAll(lista);

        // Reporta a mudança. O JTable recebe a notificação
        // e se redesenha permitindo que visualizemos a atualização.
        fireTableRowsInserted(tamanhoAntigo, getRowCount() - 1);


    }

    /**
     * Remove a linha especificada. 
     * @param indiceLinha 
     */
    public void removeTabela(int indiceLinha) {
        // Remove o sócio da linha especificada.    	
        linhas.remove(indiceLinha);

        fireTableRowsDeleted(indiceLinha, indiceLinha);
    }
    
    public void removeAllTabela(List<Tabela> tabela){
        this.linhas.removeAll(tabela);
    }


    public List<Tabela> getListaTabela() {
        return this.linhas;
    }
Criado 10 de outubro de 2011
Ultima resposta 11 de out. de 2011
Respostas 3
Participantes 4