Probleme TableModel avec plusieurs JTable [Résolu]

tibo3374 6 Messages postés jeudi 10 mai 2007Date d'inscription 26 août 2011 Dernière intervention - 20 mai 2009 à 23:39 - Dernière réponse : tibo3374 6 Messages postés jeudi 10 mai 2007Date d'inscription 26 août 2011 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
uhrand 493 Messages postés samedi 20 mai 2006Date d'inscription 15 juillet 2012 Dernière intervention - 21 mai 2009 à 08:44
3
Merci
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!

Merci uhrand 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 84 internautes ce mois-ci

Commenter la réponse de uhrand
uhrand 493 Messages postés samedi 20 mai 2006Date d'inscription 15 juillet 2012 Dernière intervention - 21 mai 2009 à 01:25
0
Merci
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.
Commenter la réponse de uhrand
tibo3374 6 Messages postés jeudi 10 mai 2007Date d'inscription 26 août 2011 Dernière intervention - 21 mai 2009 à 01:57
0
Merci
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 ;) . 
Commenter la réponse de tibo3374
tibo3374 6 Messages postés jeudi 10 mai 2007Date d'inscription 26 août 2011 Dernière intervention - 22 mai 2009 à 00:45
0
Merci
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.
Commenter la réponse de tibo3374

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.