Alterando o getColumnName e o getColumnCount dinamicamente[Resolvido]

5 respostas
Dani_Gomes

Criei meu TableModel, mas estou precisando fazer que as colunas mudem o nome conforme a tabela consultada.
Estou fazendo assim:

@Override
    public String getColumnName(int coluna){
        portariaBean bean = new portariaBean();
        String columnTwo = new String();
        switch(coluna){
                case 0:
                    return "Código";
                case 1:
                    return "Nome";
                case 2:
                    if (bean.getTabela().equals("alunos")) { // Aqui  o nullPointerException.
                        columnTwo = "Foto";
                    } else 
                        if(bean.getTabela().equals("cursos")){
                            columnTwo = "Turno";
                        } else
                             if(bean.getTabela().equals("disciplinas")){
                                columnTwo = "semestre";
                             }
                return columnTwo;
                case 3:
                    return "digital";
                case 4:
                    return "Data de Nascimento";
                default:
                    return "";
            }
    }

Porém quando eu compilo, ele dá nullPointerException.
Se alguém tiver uma ideia de como eu posso fazer para não dar este erro.
Também tenho que alterar o getColumnCount, que está assim:

public int getColumnCount() {
        int columnCount = 2;
        portariaBean bean = new portariaBean();
        if (bean.getTabela().trim() == null) { //Aqui dá o nullPointerException.
            columnCount = 2;
        } else
            if(bean.getTabela().equals("alunos")){
                columnCount = 5;
            }
        if(bean.getTabela().equals("cursos")){
            columnCount = 3;
        }
        if(bean.getTabela().equals("disciplinas")){
            columnCount = 5;
        }
        if(bean.getTabela().equals("professores")){
            columnCount = 3;
        }
        return columnCount;
    }

Mas também dá nullPointerException.
Alguém tem uma ideia por quê isto ocorre?

5 Respostas

R

É garantido que o método bean.getTabela() retornará sempre um valor não-nulo? Ao comparar String’s via equals(), é sempre bom colocar a parte fixa e não-nula do lado esquerdo, pois dessa maneira seu programa não falhará mesmo que a parte direita seja nula. Em vez do trecho:

Use o trecho:

Não se esqueça de alterar as demais comparações, ok?

Dani_Gomes

Valeu, roger_rf.
Porém quando eu compilo não acontece o que eu quero, que é trocar o nome das colunas e a quantidade de colunas conforme eu faço a consulta. Se tiveres uma ideia do que eu estou fazendo de errado?

R

Quando houver mudança na quantidade de colunas, não se esqueça de chamar o método fireTableStructureChanged() do seu TableModel:
http://download.oracle.com/javase/7/docs/api/javax/swing/table/AbstractTableModel.html#fireTableStructureChanged()

Dani_Gomes

Mas onde eu ponho o fireStrutureChanged, que eu tentei em vários lugares e não resolve?
Sabes me informar?

R

Acho que os momentos ideais são quando você preencher o TableModel pela primeira vez e quando fizer alterações a ele.

Criado 2 de novembro de 2011
Ultima resposta 2 de nov. de 2011
Respostas 5
Participantes 2