cs_biboobib
Messages postés95Date d'inscriptiondimanche 29 juillet 2007StatutMembreDernière intervention27 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!
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));
cs_biboobib
Messages postés95Date d'inscriptiondimanche 29 juillet 2007StatutMembreDernière intervention27 août 20111 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);
}
cs_biboobib
Messages postés95Date d'inscriptiondimanche 29 juillet 2007StatutMembreDernière intervention27 août 20111 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?
Vous n’avez pas trouvé la réponse que vous recherchez ?
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.
cs_biboobib
Messages postés95Date d'inscriptiondimanche 29 juillet 2007StatutMembreDernière intervention27 août 20111 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ù !!!!
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();
}
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...