Exceção para cancelar linhas de uma jTable

5 respostas
P

Pessoal fiz um laço for simples para remover todas as linhas da jTable mas lança a exceção: Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
O meu laço é o seguinte:

if(modelo.getRowCount() == 4 && contTable == 0){
            for(int i = 0; i <= modelo.getRowCount(); i++){
                modelo.removeRow(i);
            }
        }

Testei e realmente as linhas existem, alguém sabe o porque?

5 Respostas

maquiavelbona

for(int i = 0; i <= modelo.getRowCount(); i++){ ...
Está aqui o seu erro.
Por exemplo, tens 4 linhas, então os índices vão de 0 a 3. No seu laço, estás percorrendo de 0 a 4, por causa do <=. Tente trocar por < e veja se funciona.

Até!

E

Note que à medida que você remove as linhas, o número de linhas diminui. Você pode fazer isto (remover sempre a última linha):

if(modelo.getRowCount() == 4 && contTable == 0){
    for (int i = modelo.getRowCount() - 1; i >= 0; --i) {
        modelo.removeRow(i);
    }
}

ou então, remover sempre a primeira linha, até acabar a tabela,

if(modelo.getRowCount() == 4 && contTable == 0){
    for (int i = modelo.getRowCount() - 1; i >= 0; --i) {
        modelo.removeRow(0);
    }
}
maquiavelbona

Em seu segundo exemplo, o funcionamento é parecido, mudando só a assinatura do loop. No primeiro não é tão interessante por motivos operacionais mas também tem o mesmo efeito.

Até!

P

Pessoal valeu. Agora está funcionando beleza.

davidbuzatto

modelo.setRowCount( 0 );
Mais fácil não?

Segundo a documentação…

public void setRowCount( int rowCount )

Sets the number of rows in the model. If the new size is greater than the current size, new rows are added to the end of the model If the new size is less than the current size, all rows at index rowCount and greater are discarded.

Criado 6 de julho de 2007
Ultima resposta 7 de jul. de 2007
Respostas 5
Participantes 4