comment faire pour supprimer toutes les lignes dans jtable?
j'ai une jtable avec listselectionlistener je peux l'ajouter dynamiquement les nouvelles lignes dans ma table,lorsque je sélectionne la ligne la ligne sélectionnée de contenu apparaissent dans la zone de texte, je peux en mesure de modifier et supprimer les données ,pour mon application j'ai stocké les données de la table dans le fichier xml,lorsque j'ajoute une nouvelle ligne,qui sera ajouté dans la table avec succès. mais lorsque je sélectionne une ligne et mise à jour des moyens de la table à ne pas avoir de mise à jour(ici j'appelle de la table de chargement()).( mais la mise à jour des valeurs changé dans le fichier xml correctement)
mon exemple de code pour créer la table*
ListSelectionModel selectionModel;
JTable table1;
model = new DefaultTableModel();
table = new JTable(model); table.setRowHeight(20);
selectionModel = table.getSelectionModel();
selectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
selectionModel.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
stxtBox.setText("");
ptxtBox.setText("");
ntxtBox.setText("");
if (!e.getValueIsAdjusting()) {
model1 = table.getSelectionModel();
int lead = model1.getLeadSelectionIndex();
int columns = table.getColumnCount();
String sip = "";
String sport = "";
String snoq = "";
for (int col = 0; col < columns; col++) {
Object o = table.getValueAt(lead, col);
if (col == 0) {
sip += o.toString();
stxtBox.setText(sip);
selectedip = sip;
} else if (col == 1) {
sport += o.toString();
ptxtBox.setText(sport);
selectedport = sport;
} else {
snoq += o.toString();
ntxtBox.setText(snoq);
}
selectedreq = snoq;
}
}table.clearSelection();
}
});
je charge le contenu de la table comme ceci
int rowCount=0;
File file = new File("serverconfig.xml");
if (file.exists())
{
System.out.print("in load");
int e = table.getRowCount();
if(e> 0)
{
while (table.getRowCount() > 0) {
((DefaultTableModel) table.getModel()).removeRow(0);
}
}
//here i will load table content from my xml file (that's working fine)
le problème est que lorsque je mets à jour ma table de contenu je vais appeler loadtable fonction() jamais de temps je vais obtenir cette erreur
java.lang.ArrayIndexOutOfBoundsException: 1 >= 1
at java.util.Vector.elementAt(Unknown Source)
at javax.swing.table.DefaultTableModel.getValueAt(Unknown Source)
at javax.swing.JTable.getValueAt(Unknown Source)
at Testsample$18.valueChanged(Testsample.java:1810)
at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
at javax.swing.DefaultListSelectionModel.insertIndexInterval(Unknown Source)
at javax.swing.JTable.tableRowsInserted(Unknown Source)
at javax.swing.JTable.tableChanged(Unknown Source)
at javax.swing.table.AbstractTableModel.fireTableChanged(Unknown Source)
at javax.swing.table.AbstractTableModel.fireTableRowsInserted(Unknown Source)
at javax.swing.table.DefaultTableModel.insertRow(Unknown Source)
at javax.swing.table.DefaultTableModel.addRow(Unknown Source)
at javax.swing.table.DefaultTableModel.addRow(Unknown Source)
at Testsample.loadtable(Testsample.java:577)
at Testsample$10.actionPerformed(Testsample.java:1551)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
OriginalL'auteur Mr.Cool | 2012-07-24
Vous devez vous connecter pour publier un commentaire.
par exemple
OriginalL'auteur mKorbel
La vieille histoire: si il y a de l'api de haut niveau pour atteindre un but, jamais utiliser le niveau inférieur. Ou peut-être une histoire à ce sujet: lire la doc api, encore et encore 🙂
Pour DefaultTableModel, l'api de haut niveau pour supprimer toutes les lignes est:
Modifier
Regardant votre stacktrace, l'erreur n'est pas causée par la supprimer, mais en accédant à une nouvelle ligne.. Ma (au hasard, sans voir plus ou votre code 🙂 imagine la rowIndex
lead
dansvous aurez à vérifier si la validité de son, peut être négatif (pas de plomb) ou encore l'ancien (index avant de l'ajouter) à Noter que l'état de la sélection est mise à jour comme une conséquence de l'ajout/suppression de données dans le tableModel (ainsi que par l'interaction de l'utilisateur) de la loi La plus importante ici est de s'assurer que la table de données internes sont mis à jour après les changements de modèle avant d'accéder à l'état dans le code client. Vous pouvez le faire en l'enveloppant dans invokeLater:
OriginalL'auteur kleopatra
cela va faire la tâche
pour que cela fonctionne, vous devez créer une table comme ceci
OriginalL'auteur sunil
C'est très facile: il suffit de faire ceci:
Le fait qu'il y a de l'api pour removeAll ne pas faire la boucle de mal.
c'est mal parce que c'est de polluer le code de l'espace avec le code inutile: chaque responsable de ce code de rayer leur tête et essayer de trouver ce qui est caché raison pourquoi vous ne l'avez pas, d'emblée, .. à défaut de le trouver, ils ne seront pas la toucher, et - ce qui est pire - même le copier ailleurs.
Le
for
va dans la mauvaise direction: vous serez en retrait de la ligne 0 de sorte que la ligne 1 va devenir la ligne 0, mais alorsi++
donc, vous devez supprimer la ligne 2, etc. Je suppose que c'est pourquoi vous avez ajouté l'extrawhile
... Utiliser un reversefor
boucle comme @mKorbel l'a fait dans son exemple, ou, mieux encore, utilisezremoveAll()
comme toujours sage @kleopatra suggéré 😉répéter (ma réponse, le commentaire est un peu hors de la tête 🙂 juste pour le record: l'api pour les "rmoveAll" est un peu unintuively ...
setRowCount(0)
🙂OriginalL'auteur Peter