2017-09-19 2 views
-1

J'ai le code suivant, qui me permet de supprimer une ligne de la droite Jtable avec un clic. Cela fonctionne bien pour toutes les lignes, sauf lorsqu'il ne reste qu'une seule ligne. BTW, désolé pour la plupart des noms étant en portugais, c'est ma langue maternelle. Voici les images montrant avant et après je clique sur la dernière rangée du tableau. Il met à jour le total, mais la ligne reste. Pour tous les autres cas, cela fonctionne parfaitement.Dernière ligne dans un Jtable ne peut pas être supprimé

Screenshot:

enter image description here

private void jtbSelecionadosMouseClicked(java.awt.event.MouseEvent evt)            
{             
    int x = jtbSelecionados.rowAtPoint(evt.getPoint()); 
    if (x >= 0) 
    { 
     String nomeProduto = (String)jtbSelecionados.getModel().getValueAt(x, 0); 

     for (int i = 0; i < itensVenda.size();i++) 
     { 
      if (itensVenda.get(i).getNomeProduto().equals(nomeProduto)) 
      { 
       if(itensVenda.get(i).getQtd() > 1) 
       { 


        valorTotal -= (itensVenda.get(i).getPreco()/itensVenda.get(i).getQtd()); 
        double precototal = itensVenda.get(i).getPreco(); 
        double unit = precototal/itensVenda.get(i).getQtd(); 
        System.out.println("Unidade: "+unit+"\nTotal: "+precototal); 
        itensVenda.get(i).setPreco(itensVenda.get(i).getPreco() - (itensVenda.get(i).getPreco()/itensVenda.get(i).getQtd())); 
        itensVenda.get(i).setQtd(itensVenda.get(i).getQtd() - 1); 

        recarregarTabela(); 
       } 
       else if(itensVenda.get(i).getQtd() <= 1) 
       { 

        valorTotal -= itensVenda.get(i).getPreco()/itensVenda.get(i).getQtd(); 


        itensVenda.remove(i); 
        recarregarTabela(); 
       } 

      } 

     } 
    }  
fonction

qui remet à zéro la table avec les nouvelles informations:

private void recarregarTabela() 
{ 

    if (itensVenda.size() == 0) 
    { 
     dtm.getDataVector().removeAllElements(); 
     dtm.setRowCount(0); 
     lblTotal.setText("Total: R$" + String.valueOf(valorTotal)); 
    } 
    else 
    { 

     dtm.getDataVector().removeAllElements(); 
     dtm.setRowCount(0); 
     for (Item item : itensVenda) 
     { 

      Object[] vetor = new Object[3]; 
      vetor[0] = item.getNomeProduto(); 
      vetor[1] = item.getQtd(); 
      vetor[2] = String.format("%.2f", item.getPreco()); 
      System.out.println(item.getPreco()); 
      dtm.addRow(vetor); 
     } 
     lblTotal.setText("Total: R$" + String.valueOf(valorTotal)); 
    } 
} 
+0

Voir: https://stackoverflow.com/questions/38227729/how-to-delete-multiple-rows-from-jtable- database-at-a-time/38228994 # 38228994 pour un exemple qui vous permet de supprimer une (ou plusieurs) lignes sélectionnées. – camickr

+0

Je peux supprimer des lignes, juste quand il n'y a plus qu'une seule ligne –

+0

Ensuite, vous ne pouvez pas supprimer les lignes !!! La dernière rangée n'est pas différente de la première rangée, sauf que votre logique la traite différemment, alors corrigez votre logique. Vous avez reçu un exemple de travail. Apprenez de l'exemple. – camickr

Répondre

2

Vous ne devez reconstruire modèle entier à chaque fois une seule ligne est supprimée. Comme vous avez déjà l'index des lignes cliquées ou sélectionnées, vous pouvez simplement les supprimer du modèle en utilisant la méthode removeRow(index). Je soupçonne que dtm est un DefaultTableModel donc il suffit d'appeler dtm.removeRow(index) chaque fois que vous devez supprimer la ligne de la table

+0

J'ai essayé cela, et cela fonctionne pour tout, sauf quand il n'y a qu'une seule ligne, même chose que ce que j'ai fait = –

+0

Je l'ai changé à la manière actuelle parce que de cette façon ne fonctionnait pas, mais il s'avère que l'autre bien –

+0

@ SalomãoAndrade: alors vous aurez envie de créer et poster un [mcve] avec votre question. S'il vous plaît lire le lien. –