AddRow et RemoveRow dans AbstractModelTable

Résolu
cs_biboobib Messages postés 95 Date d'inscription dimanche 29 juillet 2007 Statut Membre Dernière intervention 27 août 2011 - 29 mars 2008 à 15:33
 Utilisateur anonyme - 3 avril 2008 à 06:32
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!!
A voir également:

9 réponses

Utilisateur anonyme
30 mars 2008 à 10:07
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));

3
cs_biboobib Messages postés 95 Date d'inscription dimanche 29 juillet 2007 Statut Membre Dernière intervention 27 août 2011 1
30 mars 2008 à 23:36
 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);
   
3
Utilisateur anonyme
29 mars 2008 à 18:00
Pourquoi n'étends-tu pas la classe DefaultTableModel? Ensuite, tu pourrais redéfinir juste les comportements nécessaires.

0
cs_biboobib Messages postés 95 Date d'inscription dimanche 29 juillet 2007 Statut Membre Dernière intervention 27 août 2011 1
29 mars 2008 à 18:08
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? 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
29 mars 2008 à 19:09
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.

0
cs_biboobib Messages postés 95 Date d'inscription dimanche 29 juillet 2007 Statut Membre Dernière intervention 27 août 2011 1
30 mars 2008 à 00:01
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() {  ??????  };

 }
 
0
Utilisateur anonyme
31 mars 2008 à 06:58
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...

0
cs_biboobib Messages postés 95 Date d'inscription dimanche 29 juillet 2007 Statut Membre Dernière intervention 27 août 2011 1
2 avril 2008 à 22:33
ok Merci.. té un mec géniale!! et j vai réessayé ta méthode.. ma la mienne fonctionne bien!! thnx
0
Utilisateur anonyme
3 avril 2008 à 06:32
Bonjour

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

0