IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

Jtable et BDD


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Su
    Su est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 26
    Par défaut Jtable et BDD
    Bonjour à tous,
    Voici le problème que je rencontre:

    J'ai crée une JTable qui récupère les informations dans la BDD (Base de donnée) et qui l'affiche lorsqu'on appuie sur un bouton "LISTER".

    Jusque là, tout va bien.

    Ensuite, l'utilisateur a la possibilité de modifier le contenu du Jtable. Ce qui a pour conséquences de changer la BDD.
    Pour se faire j'utilise un AbstractTableModel que j'ai personnalisé.

    Le problème est que lorsque l'utilisateur manipule les données dans la JTable. Celle ci se modifie bien dans la BDD mais ça ne rafraîchit pas dans la JTable.

    Voici les sources. Merci de bien vouloir me dire d'où le problème peut venir car là je sèche un peu.

    La fonction SetValueAt de mon TableModel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public void setValueAt(Object value, int rowIndex, int columnIndex) {
              //Cette classe permet juste de se connecter à la base de donnée
    	  this.pgSqlAccess = new PgsqlAccess("xxx", xxx, "xxx", "xxx", "xxx");
     
    	  try {
    		this.pgSqlAccess.executeUpdate("UPDATE t_administration_adm SET "+this.getColumnName(columnIndex)+"='"+value+"' WHERE "+this.getColumnName(0)+"="+this.getValueAt(rowIndex, 0)+";");
    	  } 
    	  catch (SQLException e) {
     
    		e.printStackTrace();
    	  }
     
    	  fireTableCellUpdated(rowIndex, columnIndex);
     
      }
    L'action de écouteur sur le bouton Lister:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    else if(_evenement.getActionCommand().equals("LISTER")){
     
    				try {
    					ResultSet resultSet = this.executeQueryJtable("SELECT * FROM t_administration_adm;");
    					JtableRequeteModel TableModel = new JtableRequeteModel(resultSet);
    					JTable jTableAdministration = new JTable(TableModel);
     
    					TableColumn col = jTableAdministration.getColumn("adm_grp");
    					col.setCellEditor(new JtableCellEditor());
     
    					JPanel panelListerAdm = this.panelAdmin.getjPanelListeAdministration();
    					panelListerAdm.removeAll();
    					JScrollPane Jsp = new JScrollPane(jTableAdministration);
    					Jsp.setPreferredSize(new Dimension(1000,400));
    					panelListerAdm.add(Jsp);
    					panelListerAdm.repaint();
    					panelListerAdm.revalidate();
    				} 
    				catch (SQLException e) {
    					System.out.println("Erreur dans la liste des administrations");
    					e.printStackTrace();
    				}
     
    		}
    Je ne comprend pas pourquoi à vrai dire il ne veut pas changer la valeur de mon JTable, si j'appuie à nouveau sur le bouton LISTER, dans ce cas là les valeurs se mettent à jour.. Mais bon ce n'est pas le but, j'ai beau essayer fireTableCellUpdated(rowIndex, columnIndex) ou fireTableDataChanged() mais rien y fait..

    Quelqu'un pour m'aider? Merci d'avance

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Pour faire simple, il ne faut absolument pas faire tes actions vis à vis de la base de données dans ton modèle. D'ailleurs ces action ne doivent pas être réalisées du tout dans le thread graphique (dans lequel tout le code de ton interface et de ton modèle s'exécute). Ce Thread graphique a pour nom Event Dispatch Thread (aka EDT) et je te recommande de façon impérative la lecture de l'article suivant: http://gfx.developpez.com/tutoriel/j...ing-threading/


    Communément on procèdera de la façon suivante.

    Avoir une (au moins, si possible en suivant le pattern DAO) classe exposant des méthodes permettant de réaliser toutes les actions voulues en BDD.

    Avoir un modèle contenant ses données détachées de la base. (Grosso modo on l'alimente avant l'initialisation de la base(en récupérant les données dans un Thread séparé, cf lien vers le SwingWorker plus loin dans ma réponse, puis il se gère tout seul). Voir ce tutoriel sur les JTable pour savoir comment implémenter un modèle un tant soit peu bien foutu: http://baptiste-wicht.developpez.com.../swing/jtable/

    Puis placer un TableModelListener sur le modèle en question.
    TableModelListener qui va s'activer automatiquement à chaque appel d'une des méthodes fireXXX.

    C'est dans les méthodes de ton TableModelListener que tu pourras faire ton appel aux méthodes de la classe de gestion de la base de données (d'ailleurs en général évite le SQL dans le code du GUI, c'est vraiment pas propre du tout). Toutefois ces appels devront être réalisés dans un Thread séparé afin de ne pas bloquer ton interface graphique.
    Pour ceci je te propose l'utilisation de la classe SwingWorker qui est destinée à cet effet: http://rom.developpez.com/java-swingworker/

    Et puis voilou.

  3. #3
    Su
    Su est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 26
    Par défaut
    je te remercie de ta réponse

Discussions similaires

  1. Actualisation JTable avec BDD
    Par Mokujil dans le forum Composants
    Réponses: 1
    Dernier message: 27/05/2009, 14h24
  2. Réponses: 4
    Dernier message: 05/07/2008, 20h06
  3. Rafraichissement JTable avec donnée BDD
    Par Coco4486 dans le forum Composants
    Réponses: 2
    Dernier message: 30/07/2007, 16h32
  4. ecrire le contenu d'une jtable dans une BDD
    Par gdhugue1 dans le forum Composants
    Réponses: 1
    Dernier message: 13/06/2007, 15h52
  5. JTable et BDD
    Par nourdine dans le forum Composants
    Réponses: 3
    Dernier message: 18/01/2006, 20h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo