Probleme TableModel avec plusieurs JTable

Résolu
tibo3374 Messages postés 6 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 26 août 2011 - 20 mai 2009 à 23:39
tibo3374 Messages postés 6 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 26 août 2011 - 22 mai 2009 à 00:45
Bonjour,

Je suis en train de développé une application java qui gère une base de données MYSQL.
Sur la JFrame principal j'ai 2 JTable.
Ces deux JTable sont rempli par des requetes SQL via un TableModel (extends AbstracTableModel).
Le raffraichissement fonctionne très bien cependant lorsque que je raffraichit une des JTable (avec
 fireTableStructureChanged
() ) l'autre se raffraichit avec les meme données.

Je ne trouve pas de solution a ce probleme, en effet les données stocké par une des JTables sont détruites lorsque que l'autre se raffraichit, je cree pourtant deux modeles distinct. J'ai meme essayé de creer une autre classe qui extends AbstractTableModel mais les données sont une nouvelle fois ecrasé a chaque raffraichissement.
Si quelqu'un avait une idée sa serait sympa parce que je galère depuis un moment maintenant.

Merci.

4 réponses

uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
21 mai 2009 à 08:44
Sans un court exemple indépendant et compilable c'est difficile. Avec un exemple qui tourne on peut trouver le truc au moins dix fois plus vite qu'avec les yeux nus fixés sur un fragment de code. C'est même possible qu'en construisant l'exemple tu trouve toi-même la solution!
3
uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
21 mai 2009 à 01:25
En général, deux tables différentes ne peuvent pas influencer l'une l'autre.
Il faudrait reconstruire le problème sur un court exemple indépendant et compilable.
0
tibo3374 Messages postés 6 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 26 août 2011
21 mai 2009 à 01:57
C'est gentil d'avoir repondu, je vais etre plus précis avec des exemples de mon code.

Ma class TableModelFromMysql :
class TableModelFromMysql extends AbstractTableModel implements TableModel
{


 public TableModelFromMysql()
 {
  setDataN();
 }
 
 public TableModelFromMysql(String query)
 {
  setDataT(query);
 }


 public int getColumnCount()
 {
  int ColNb = 0;
  try
  {
   if (jTabledefault)
    ColNb = connexion.getResultSet().getMetaData().getColumnCount();   
   else
    ColNb = 0;
  }
  catch(SQLException e)
  {
   System.out.println(e);
  }
   return ColNb;
  }


 public int getRowCount()
 {
  int RowNb = 0;
  try
  {
   if (jTabledefault)
   {
    ResultSet rs = connexion.getResultSet();
    rs.last();
    RowNb = rs.getRow();
   }
   else
   {
    RowNb=0;
   }
  }
  catch(SQLException e)
  {
   System.out.println(e);
  }
  return RowNb;
 }


 public String getColumnName(int c)
 {
  String ColName = "";
  try
  {
   if (jTabledefault)
    ColName = connexion.getResultSet().getMetaData().getColumnName(c + 1);
   else
    ColName="????";
  }
  catch(SQLException e)
  {
   System.out.println(e);
  }
  return ColName;
 }


 public Object getValueAt(int row,int column)
 {
  Object dataO = "";
  try
  {
   if (jTabledefault)
   {
    ResultSet rs = connexion.getResultSet();
    rs.absolute(row + 1);
    dataO = rs.getObject(column + 1);
   }
   else
   {
    dataO = "";
   }
  }
  catch(SQLException e)
  {
   System.out.println(e);
  }
  return dataO;
 }


 public void setDataT(String query)
 {
  jTabledefault =true;
  connexion = new SQLExecuteQuery();
  connexion.setQuery(query);
  fireTableStructureChanged();
 }
 
 public void setDataN()
 {
  jTabledefault=false;
  fireTableStructureChanged();
 }
 private boolean jTabledefault;
 public static SQLExecuteQuery connexion;

Dans ma JFrame principale j'initialise les models comme ce ci
TableModel TMvisu = new TableModelFromMysql();
TableModel TMheader = new TableModelFromMysql();

j'initialise egalement les JTable :
JTable jTableVisu = new JTable();
jTableVisu.setModel(TMvisu);
JTable jTableHeader = new JTable();
jTableHeader.setModel(TMheader);

Ensuite pour gerer les changements de valeur des JTable (separement), j'utilise la méthode setDataN pour vider et setDataT pour remplir avec une nouvelle requete.
Un appel par exemple :
requeteVarTab = "Select `"+varx+"`,`"+vary+"` from mesure";
((TableModelFromMysql)jTableVisu.getModel()).setDataT(requeteVarTab);

Quand je fais cet appel, les deux JTable sont modifié alors que les JTables sont placé dans deux models différents, c'est cela que je ne comprend. Je pense que je m'y prend mal. Si vous avez une suggestion merci de m'aiguiller ;) . 
0
tibo3374 Messages postés 6 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 26 août 2011
22 mai 2009 à 00:45
Bonjour,

Comme vous me l'avez conseillé j'ai fait un court exemple :
une JFrame avec 2 Jtables de test avec des Objets de donnees statiques.
Le raffraichissement marché très bien, l'une se raffraichissait et l'autre non.
J'ai donc modifié mon TableModel et ma classe qui traité les requetes SQL, plusieurs élement etaient statiques.

Le problème est donc résolu, merci bien pour ce conseil.

A bientot.
0
Rejoignez-nous