TableModel com nº de Colunas Variável

5 respostas
loganwlogan

Bom dia amigos,

Estou com um problema no TableModel de uma aplicação que estou desenvolvendo. A aplicação gera um Diário de Classe com um array de alunos, cada aluno tem uma array de aulas. Aí começam os problemas, pois dependendo da disciplina o número de aulas varia. A tabela deve ter a primeira coluna com o nome do aluno e uma coluna para cada dia de aula, onde eu coloco se ele teve presença ou falta. Por causa do nº variável de colunas eu não tive como implementar o um switch no método public Object getValueAt(int rowIndex, int columnIndex) então eu fiz um If com o columIndex se ele dor igual a zero retorna o nome do aluno, se for maior que zero ele retorna as aulas. O problema é que ele está dando Index out of Bounds.
Abaixo segue o meu TableModel se alguém puder me ajudar agradeço muito.

public class DiarioClasseTableModel extends AbstractTableModel {

    ArrayList<Aula> vAula;
    ArrayList<Aluno> vAlunos;

    public DiarioClasseTableModel(ArrayList<Aluno> vAluno) {
        this.vAlunos = vAluno;//Recebe o array de alunoa
        this.vAula = vAlunos.get(0).getvAula();//pega o array de aulas do primeiro aluno para saber o número de colunas que que a tabela terá 
    }

    public int getRowCount() {
        return vAlunos.size();
    }

    public int getColumnCount() {
        return vAula.size() + 1;//define o número de colunas acrescido de uma que é o nome do aluno
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        Aluno umAluno = vAlunos.get(rowIndex);
        vAula = umAluno.getvAula();

        if (columnIndex == 0) {//se o columnIndex for zero ele retorna o nome do aluno
            return umAluno.getNome();
        } else {//se não ele retorna  as faltas e presenças do aluno no dia da aula
            Aula umaAula = vAula.get(columnIndex);
            return umaAula.retornaFP();
        }
    }
}

Att

Marcelo Logan

5 Respostas

E
public Object getValueAt(int rowIndex, int columnIndex) {  
         Aluno umAluno = vAlunos.get(rowIndex);  
         vAula = umAluno.getvAula();  
   
         if (columnIndex == 0) {//se o columnIndex for zero ele retorna o nome do aluno  
             return umAluno.getNome();  
         } else {//se não ele retorna  as faltas e presenças do aluno no dia da aula  
             if (columnIndex >= vAula.size()) return null; // isto leva em conta que o arraylist pode ser mais curto que o número de colunas
             Aula umaAula = vAula.get(columnIndex);  
             return umaAula.retornaFP();  
         }  
     }
ViniGodoy

Seu get deve ser:

Aula umaAula = vAula.get(columnIndex-1); return umaAula.retornaFP();

Lembre-se que nesse columnIndex o valor vem acrescido de 1, pois a primeira coluna é o nome do aluno.

loganwlogan

Putz!!!
Como eu dei mole, eu pensei nas coisas mais mirabolantes possíveis, mas não pensei no mais óbvio. Valeu mesmo pela ajuda amigão.

Abçs

Marcelo Souza

loganwlogan

Olá Vini,

Eu já tinha colocado o -1, mas continuava dando erro pois eu tinha muitas colunas além do que eu precisava, mas agora deu tudo certo valeu pela ajuda galera!!

Abçs

Marcelo Logan

PS: Gostei muito do novo PontoV

E

Em inglês:

http://medscape.typepad.com/thedifferential/2008/07/horses-zebras-n.html

Criado 23 de setembro de 2010
Ultima resposta 23 de set. de 2010
Respostas 5
Participantes 3