Problema lógico

15 respostas
guisantogui

Gente no meu JTable qro deletar as linhas que foram adicionadas, mas que naum possuem nada escrito.

Tudo legal até que eu tentei deixar o JTable em branco (deletar todas linhas), mas a ultima fica. Isso eu ainda consegui resolver se a tabela só tiver uma linha, mas se tiver mais de uma ela não apaga a ultima, é necessário entrar e sair da tela (para deixar a tela com apenas uma linha) para ser possível a exclusão, segue o codigo:

Botão que sai da tela, e consequentemente apaga as linhas em branco:

private void btnRetornaActionPerformed(java.awt.event.ActionEvent evt) { boolean flag = true; while(flag){ if(modelo.getValueAt(0, 0).toString().trim().equalsIgnoreCase("")){ modelo.removeRow(0); } for(int i = 1; i < modelo.getRowCount(); i++){ if(modelo.getValueAt(i, 0).toString().trim().equalsIgnoreCase("")){ modelo.removeRow(i); i--; } } } this.dispose(); }

Botão que adiciona linha:

private void btnAddLinhaActionPerformed(java.awt.event.ActionEvent evt) { modelo = (DefaultTableModel) tabTiposPessoas.getModel(); modelo.addRow(new String[]{""}); tabTiposPessoas.setModel(modelo); }

15 Respostas

diogofabri

Fala brother!!!
Então acho que vi algo estranho!
Note que quando você usa a estrutura de repetição, você pega o numero de tuplas existentes certo?
Mas tem um porém, quando entra no IF, ele diminui 1 na contagem total de tuplas.

Não sei se entendi sua ideia, me corrija: Quando excluir uma tupla, você volta no mesmo ponto, pegando a coluna que ficará na posição da que foi excluida, certo?
Até ai concordo,
tente criar uma variavel recebendo o numero total de colunas, para não ter confusão, quando executar o IF,

Não sei se fui claro, qualquer duvida avise, vou colocar um modelo aqui:

int total_tuplas = modelo.getRowCount();

   for( int = 1; i < total_tuplas; i++){...}

Abraçooo!!!

guisantogui

a variavel i vai diminuindo, no caso se mantendo o mesmo valor (i++ depois i–), pois eu vou excluindo os registros da lista, se só aumentasse ele naum excluiria todos!

vlw!

diogofabri

Isso eu entendi…
mas o q eu sugeri funcionou?

guisantogui

eu naum testei, mas naum daria no mesmo?

Tiago.Argolo

Tentou começar o valor de “i” com 0? =]

guisantogui

estoura index of bounds pq naum tem linha de nro 0!

:confused:

Tiago.Argolo

Ueh… e como tu consegue fazer isto:

if(modelo.getValueAt(0, 0).toString().trim().equalsIgnoreCase("")){ modelo.removeRow(0); }

Não está referenciando a linha 0 e coluna 0 ? Me corrija se eu estiver errado

guisantogui

Sim, mas eu sei lah como o JAVA aceitou isso eu sei q o 0 naum funcionava para percorrer :?

Tiago.Argolo

Outra coisa que estive pensando … Se vc começar a remover da primeira linha pra ultima… a proxima linha vai ser o valor da linha apagada… ou seja:

Se eu removo a linha 1… agora a linha 2 vai ser a linha 1. Então, a linha 1 “logicamente” continuará existindo. Sendo assim… teremos esta linha 1 até que a ultima seja apagada. Então seria bom apagar da ultima até a primeira.

guisantogui

eh q eu só qro apagar as linhas em branco, dae eu começo do inicio verificando quais estão em branco ou naum!

Tiago.Argolo

Mas então amigão… é isto!

Caso você tenha 2 linhas em branco, certo?

Aí vai vc apaga a primeira na posição 1… ok. A que estava na posição 2 foi pra posição 1…
Seu loop vai procurar agora na posição 2 se tem linha em branco. Não tem. Porque? Porque a linha em branco que estava na posição 2 está na 1 agora e vc ja verificou ela.
Porque só quando entra denovo que apaga? Porque quando vc entra denovo… zera o valor de i no loop e ela encontra a linha 1.

Capiche?

N

Nesta linha:

for(int i = 1; i < modelo.getRowCount(); i++){

não deveria ser:

for(int i = 0; i < modelo.getRowCount(); i++){

Tenta ae, vlw.

guisantogui

mas eu to fazendo qdo apagar uma linha a minha variavel i aumenta 1 e diminui 1 ficando na mesma posição, certo?

pedroroxd

Faça seu proprio table model
Crie um método que verifica se a linha está em branco, se estiver retorna true

Você faz um lupi para verificar todas as linhas, as que voltarem como true vc exclui
Não use default table model, só vai te dar dor de cabeça… O código vira um xutômetro, vc vai xutando aki e ali, até dar certo, sem saber o que está fazendo.
Entre aki, e veja as vantagens de seu proprio table model, e crie-o em menos de 2 minutos: http://www.guj.com.br/posts/list/15/199067.java#1001295

diogofabri

Oooo brother mais ta tenso heim!
faz o que eu te sugeri la em cima q vai funfa…
Nao vai da na mesma não…
Executa isso no lápis e papel como se fosse vc o compilador…

você vai ver a diferença de usar
o getRow() dentro e fora do FOR…

flws

Criado 4 de maio de 2010
Ultima resposta 6 de mai. de 2010
Respostas 15
Participantes 5