AddRow et RemoveRow dans AbstractModelTable

Résolu
Signaler
Messages postés
95
Date d'inscription
dimanche 29 juillet 2007
Statut
Membre
Dernière intervention
27 août 2011
-
 Utilisateur anonyme -
Slt vous tous..

Jé fai un Model  AbstractModelTable a tous mes JTable parceque et d'prés mes modeste connaissances c'est Plus pratique que le DefaultModeltable lorsque nos donneés proviennent d'une BDD..!

mais là j'ai rencontré une probléme avc la suppression et l'ajout des lignes dans Le JTable!! car les methodes prédefini AddRow() et RemoveRow() sont accessible qu'avc le DefaultModelTable..!!

j'ai besoin de ca pr bien manipuler le JTable et La BDD au méme temp!!

 je continue mes recherches et mes essai en attendant vos réponses!

merci d'avance!!

9 réponses


Tu dis que data[0].size() te donne le nombre de lignes donc data[i] est une colonne. Cependant, dans removeRow, tu boucles sur le nombre de lignes au lieu de boucler sur le nombre de colonnes donc il y a bien un problème. Tu devrais retirer dans chaque colonne l'élément correspondant à la ligne à supprimer. Selon moi, remplace donc tout simplement getRowCount() par getColumnCount() dans ta méthode removeRow(int row).

Pour addRow(Vector rowData), je propose que tu fasses comme pour la méthode removeRow une fois corrigée mais en faisant plutôt data[i].add(rowData.get(i));

Messages postés
95
Date d'inscription
dimanche 29 juillet 2007
Statut
Membre
Dernière intervention
27 août 2011
1
 slt..!! j'ai essayé ta méthode mais ne marche pas... et voilà j'ai trouver une solution !!

//ajout de une ligne
public void addRow(int row,Object value)
      {
        for (int i = 0; i < getColumnCount(); i++)
          data[i].add(row,value);
          fireTableRowsInserted(row,row);
    }

// l'action du Boutton d'ajout:

    String s=" ";
    tmp.addRow(tmp.getRowCount(),s);
   

Pourquoi n'étends-tu pas la classe DefaultTableModel? Ensuite, tu pourrais redéfinir juste les comportements nécessaires.

Messages postés
95
Date d'inscription
dimanche 29 juillet 2007
Statut
Membre
Dernière intervention
27 août 2011
1
merci mais tu peu etre un peu claire!!  car je croi que la class AbstractModelTable me convient plus..!! et si la class DefaultModelTable ne me pose pas de problem avec La BDD.. je  l'essayerai !! alors t pense koi? 

Excuse moi mais je pense que tu dis n'importe quoi. Je ne vois pas en quoi utiliser AbstractTableModel conviendrait mieux à ta base de données. Je te suggère soit de te contenter du modèle par défaut soit de créer une classe qui étend DefaultTableModel. Tu peux ensuite redéfinir certaines méthodes si tu veux faire des choses qui ne sont pas implémentées dans le model par défaut.

Personnellement, moi je ferais juste ma_jtable.getModel().addRow(...);
Pourquoi marques-tu "AddRow"? D'après les conventions Java, les méthodes ne commencent jamais par une majuscule.

Messages postés
95
Date d'inscription
dimanche 29 juillet 2007
Statut
Membre
Dernière intervention
27 août 2011
1
désolé chèr gouessj ...mais c toi qui comprend pas là..lool!! biensur j'ai crée une class qui extend de la class AbstractModelTable et J'ai redéfini mes methodes nécessaire!!

au ts cas j'ai  reussi a crée une methode pr la supression d'un row et ca marche bien sans utiliser le DefaultModelTable..! mais le problém pérsiste avec la methode addRow() a crée!! j'ai essayé mais

voilà mon code pour mieux comprendre amigo au cas où !!!!

import java.util.ArrayList;
 import javax.swing.table.AbstractTableModel;

 public class TableModelPerso extends AbstractTableModel {
   private String [] labelColonne; //Les entêtes des colonnes
   private ArrayList [] data; //Les données

   public TableModelPerso (String [] titres) {
     labelColonne = titres;

     //On initialise la structure de donnée
     data = new ArrayList[labelColonne.length];
     for (int i = 0; i < labelColonne.length;i++)
       data[i] = new ArrayList();
   }

   //Fonctions qu'il est nécéssaire de surcharger

   public String  getColumnName  (int col)          {return labelColonne[col].toString();}
   public int     getRowCount    ()                 {return data[0].size();}
   public int     getColumnCount ()                 {return labelColonne.length;}
   public boolean isCellEditable (int row, int col) {return false; }
   public Object  getValueAt     (int row, int col) {return data[col].get(row);}

   //On ajoute , on remplace ou on supprimer suivant les valeurs entrées...
   public void setValueAt(Object value, int row, int col) {
     if (value != null) {
       if (row >= data[col].size())
         data[col].add(row,value);
       else
         data[col].set(row,value);
     } else
       for (int i = 0; i < getColumnCount(); i++)
         data[i].remove(row);
     fireTableDataChanged();
   }

   //Permet de tout éffacer
   public void clear () {
     for (int i = 0;i < labelColonne.length;i++)
       data[i].clear();
     fireTableDataChanged();
   }
  
   public void removeRow(int row)
   {    for (int i = 0; i < getRowCount(); i++)
            data[i].remove(row);
        fireTableDataChanged();
}
  
public void addRow() {  ??????  };

 }
 

Bonjour

Lis bien ce que je t'avais proposé. Et pourquoi ma solution ne marche pas? A mon avis, si tu ajoutes fireTableRowsInserted(row,row) dans ma solution à la place de fireTableDataChanged(), ça marche autant que la tienne puisque, vu ce que tu fais dans ton bouton d'ajout, ça revient au même. La correction que je propose pour ta méthode removeRow reste valable...

Messages postés
95
Date d'inscription
dimanche 29 juillet 2007
Statut
Membre
Dernière intervention
27 août 2011
1
ok Merci.. té un mec géniale!! et j vai réessayé ta méthode.. ma la mienne fonctionne bien!! thnx

Bonjour

Merci. C'est juste que je n'aimerais pas que ton programme marche mal à cause d'une petite faute d'étourderie. Bon courage.