64 votes

comment effacer JTable

Comment puis-je effacer le contenu d'un JTable en utilisant Java

0 votes

Vérifiez cette question : stackoverflow.com/questions/4439210/

0 votes

90voto

Carlos Heuberger Points 11804

Vous devez supprimer les données du TableModel utilisé pour le tableau.

Si vous utilisez le DefaultTableModel il suffit de mettre le nombre de lignes à zéro. Cela supprimera les lignes et déclenchera la commande TableModelEvent pour mettre à jour l'interface graphique.

JTable table;
…
DefaultTableModel model = (DefaultTableModel) table.getModel();
**model.setRowCount(0);**

Si vous utilisez d'autres TableModel veuillez consulter la documentation.

0 votes

J'ajoute juste ceci ici... J'ai dû appeler table.revalidate(); après avoir mis le nombre de lignes à zéro afin de voir le changement immédiatement, sinon je n'ai pas vu le changement jusqu'à ce que je clique sur l'option JTable .

0 votes

@Jim-Dingo fonctionne bien sans revalidate() pour moi : exemple simple Le site DefaultTableModel informe la vue quand les données ont été changées - vérifiez le code de setNumRows(int) il appelle fireTableRowsDeleted si le nombre de lignes est diminué.

0 votes

Peut-être @Sakiboy utilise-t-il l'ancien JDK et doit-il revalider() chaque fois que le modèle change.

22voto

Robe Elckers Points 613

Fondamentalement, cela dépend du TableModel que vous utilisez pour votre JTable. Si vous utilisez le DefaultTableModel vous pouvez le faire de deux manières:

 DefaultTableModel dm = (DefaultTableModel)table.getModel();
dm.getDataVector().removeAllElements();
dm.fireTableDataChanged(); // notifies the JTable that the model has changed
 

ou

 DefaultTableModel dm = (DefaultTableModel)table.getModel();
while(dm.getRowCount() > 0)
{
    dm.removeRow(0);
}
 

Voir le JavaDoc de DefaultTableModel pour plus de détails

3 votes

N'oubliez pas de déclencher un événement table si vous modifiez le vecteur de données sous-jacent - sinon la JTable ne saura pas qu'elle a changé...

1 votes

-1, les deux suggestions sont fausses. La première, pour la raison commentée ci-dessus. La seconde sautera des lignes parce que la variable i continue de s'incrémenter au fur et à mesure que vous supprimez chaque ligne. Si vous voulez créer une boucle, il vous suffit de continuer à supprimer la ligne 0, jusqu'à ce qu'il n'y ait plus de lignes. Cependant, Carlos a affiché la solution la plus simple.

0 votes

Camickr, vous avez raison. J'ai modifié ma réponse pour résoudre ces problèmes. Cependant, la solution de Carlos est plus facile à mettre en œuvre.

7voto

Black_Zerg Points 29

Je devais obtenir un tableau propre sans colonnes. J'ai fait ce qui suit :

jMyTable.setModel(new DefaultTableModel());

0 votes

C'est une solution rapide et efficace, mais elle supprime aussi l'en-tête. Ce serait mieux s'il y avait une option pour ne pas supprimer l'en-tête. Quelqu'un dans un autre message a suggéré de supprimer toutes les lignes une par une. Cela permettrait de conserver l'en-tête

4voto

Dan Cheshire Points 3

C'est la méthode la plus rapide et la plus simple que j'ai trouvée ;

while (tableModel.getRowCount()>0)
          {
             tableModel.removeRow(0);
          }

Cela efface la table rapidement et la laisse prête pour de nouvelles données.

0voto

Mot Points 5281

Cela dépend du modèle que vous utilisez pour votre JTable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X