Ajuda com jtable.setModel();

5 respostas
A

Olá pessoal, depois de minhas andanças em vários artigos e links lidos sobre jTable, consegui criar minha tableModel, porém, agora estou com um problema na forma de chamá-la pelo método setModel() das propriedades da jTable no Netbeans.

Eu fiz um teste da seguinte forma no netbeans e funcionou:
Clicar com o botão direito na jtable, Conteúdo da tabela, Personalizar código, daí no método setModel eu colocava da seguinte forma jTableAlunos.setModel(getTableModelAlunos()); e meu método que eu utilizava para teste era o seguinte:

private DefaultTableModel getTableModelAlunos(){

    String[][] linhas = new String [][]{
                  {"SP","Sao Paulo"},
                  {"RJ","Rio de Janeiro"},
                  {"RN","Rio Grande do Norte"},
                  {"PR","Parana"}
    };
    String[] colunas = new String []{"Estado","Cidade"};

        return new DefaultTableModel(linhas, colunas);

    }

Preenchia tudo na mão para teste...

Então juntando tudo que encontrei na net, acabei chegando a essa classe:

public class AlunoTableModel extends AbstractTableModel {

    private String[] nomeColunas = {"Código", "Nome", "E-mail"};
    private List<Aluno> alunos;

    // construtor padrão criando um arraylist de alunos
    public AlunoTableModel(){
        alunos = new ArrayList<Aluno>();
    }

    // construtor que adiciona a lista passada pelo método ao alunos
    public AlunoTableModel(List<Aluno> lista){
        this();
        this.alunos.clear();
        this.alunos.addAll(lista);
        super.fireTableDataChanged();
    }

    public int getRowCount() {
        return alunos.size();
        //throw new UnsupportedOperationException("Not supported yet.");
    }

    public int getColumnCount() {
        return nomeColunas.length;
        //throw new UnsupportedOperationException("Not supported yet.");
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
                 Aluno aluno = alunos.get( rowIndex );
         switch( columnIndex ) {
             case 0: return aluno.getId();
             case 1: return aluno.getNome();
             case 2: return aluno.getEmail();
         }
         return null;
        //throw new UnsupportedOperationException("Not supported yet.");
    }
}

Agora a dúvida, como que eu altero o método getTableModelAlunos() para retornar para a minha tabela?

Eu tentei da seguinte forma?
private void getTableModelAlunos(){


        AlunoDao ad = new AlunoDao();
        AlunoTableModel atm = new AlunoTableModel(ad.listarAlunos());
        jTableAlunos.setModel(atm);

    }

Mas tenho que retornar alguma coisa... não pode ser void, então o que retorno?
O piripaque deu aqui, e deu tilt no pensamento também, já tentei JTable, DefaultTableModel.... e não consigo progredir.

Se alguém puder ajudar.

Obrigado.

5 Respostas

M
private TableModel getTableModelAlunos(){


        AlunoDao ad = new AlunoDao();
        return new AlunoTableModel(ad.listarAlunos());
    }
H

Na hora que você vai criar o jTeble, usa assim:

no caso acima, provavelmente a tabela irá ficar vazia, faz um contrutor para ela, ou faz um método para inserir objetos nas linhas:

no ultimo caso, você tera que implementar um setAlunos lá no seu tableModel…

A

Mark
muito obrigado pela resposta super rápida…
Agora funcionou…

Valeu
Alexander

A

Hellmanss valeu pela responsta, já funcionou direitinho conforme o Mark passou.

Muito obrigado.
Alexander

T

Boa tarde Alexmaoli,

Sobre sua classe, o atributo nomeColunas está sendo utilizado em algum lugar? É que testei aqui e a atribuição no JTable funciona, porém o nome das colunas fica como A, B, C etc…

Criado 25 de maio de 2009
Ultima resposta 10 de nov. de 2014
Respostas 5
Participantes 4