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 :

Problème de raffraichissement d'un JTable.


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Par défaut Problème de raffraichissement d'un JTable.
    Salut,

    Dans mon JFrame j'ai une JTable qui affiche bien des données de ce genre :

    nom prénom adresse


    nom1 prenom1 adresse1
    nom2 prenom2 adresse2
    xnom3 xprenom3 xadresse3


    avec ce JTable, j'ai aussi un JTextField, je lance une recherche après chaque saisie d'une lettre, par exemple si je tape "no", la table doit afficher les deux premiers enregistrements, si je tape "nom2" la table doit afficher le deuxième enregistrement etc....

    PROBLÈME :

    j'arrive bien à lancer la recherche après chaque saisie d'une lettre dans le jTextField, mais le problème que j'ai, c'est que j'arrive pas à redessiner le JTable sachant que j'obtiens bien la liste souhaitée.

    Voici le code que j' exécute après chaque saisie d'une lettre dans le jTextField:

    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
     private void jTextField1KeyReleased(java.awt.event.KeyEvent evt) {                                        
          //Lancer la recherche des éléments qui commence par les caractères saisis par l'utilisateur.
          List fichesPatient = this.getFichePatientService().getAllFichesPatients(this.jTextField1.getText());
         //On redéssine le tableau et on y ajoute les éléments de la liste.
          this.jTable1 = new JTable(fichesPatient.size(), 6);//On écrase l'ancien table qui affiche les données avant la saisie d'une lettre dans la zone de texte.
          if(fichesPatient !=null && fichesPatient.size()>0){
              Iterator it = fichesPatient.iterator();
              int ligneTableau = 0;
              while(it.hasNext()){
                   FichePatient fichePatient = (FichePatient)it.next();
                   this.jTable1.setValueAt(fichePatient.getNomPatient(), ligneTableau, 0);
                   this.jTable1.setValueAt(fichePatient.getPrenomPatient(), ligneTableau, 1);
                   this.jTable1.setValueAt(fichePatient.getDatePremiereVisitePatient(), ligneTableau, 2);
                   this.jTable1.setValueAt(fichePatient.getDateDerniereVisitePatient(), ligneTableau, 3);
                   this.jTable1.setValueAt(fichePatient.getReferenceDossierPatient(), ligneTableau, 4);
                   ligneTableau++;
              }
              this.jTable1.setVisible(true);
          }
        }
    malgré que j'ai fait un new JTable pour écraser l'ancien, ça marche pas, et la table reste la même.

    avez-vous une idée SVP?

    Par avance merci.

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2011
    Messages : 7
    Par défaut
    Bonjour amine1980,
    Tout d'abord, ne le prends pas mal, mais la façon dont tu présente ton code c'est pas mal du "spaghetti". Je te suggère d'essayer de toujours segmenter tes méthodes afin que tout soit clair et propre.

    Deuxièmement, personnellement j'aurais utilisé le AbstractTableModel pour modifier les données de ta JTable, mais comme je n'ai pas envie de tomber là dedans en ce moment, je vais utiliser l'option que tu avais choisie, c'est à dire de créer un nouveau JTable à chaque recherche (ce qui pourrait éventuellement causer des problèmes de rafraichissement si tu as une très grosse liste).

    Il y a quelques petites choses(très importantes) que tu n'as pas prises en compte.
    Lorsque tu remplaces this.jTable1, ça ne remplace pas l'objet qui est contenu dans ton JScrollPane. Ton JScrollPane contient toujours l'ancien JTable.
    Pour le remplacer, tu dois tout d'abord enlever l'ancien, puis ajouter le nouveau.
    Voir comment j'ai modifié ton code plus bas, tu devrais mieux comprendre.

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    	 private void jTextField1KeyReleased(java.awt.event.KeyEvent evt) {                                        
    	      //Lancer la recherche des éléments qui commence par les caractères saisis par l'utilisateur.
    		 this.jTable1.setVisible(false); // on rend l'ancienne invisible, ça évite des erreurs avec le repaint
    		 scrollPane.remove(this.jTable1); // on enlève l'ancienne JTable de son "container", généralement un JScrollPane
    		 this.jTable1 = getNewTable(this.jTextField1.getText()); // on crée la nouvelle JTable
    		 this.jTable1.setVisible(true); // on rend la nouvelle JTable visible
    		 scrollPane.setViewportView(this.jTable1); // on met la nouvelle JTable dans le JScrollPane
    	    }
     
    	 /**
              * @param text
              * @return
              */
    	 private JTable getNewTable(String text)
    	 {
    		 List fichesPatient = this.getFichePatientService().getAllFichesPatients(text);
    		 //On redéssine le tableau et on y ajoute les éléments de la liste.
    		 List<Object[]> data = new ArrayList<Object[]>();
    		 if(fichesPatient !=null && fichesPatient.size()>0){
    			 Iterator it = fichesPatient.iterator();
    			 int ligneTableau = 0;
    			 while(it.hasNext()){
    				 FichePatient fichePatient = (FichePatient)it.next();
    				 Object[] d = {fichePatient.getNomPatient(),
    						 fichePatient.getPrenomPatient(),
    						 fichePatient.getDatePremiereVisitePatient(),
    						 fichePatient.getDateDerniereVisitePatient(),
    						 fichePatient.getReferenceDossierPatient()
    				 }
    				 data.add(d);
    			 }
    		 }	 
    		 JTable newTable = new JTable((Object[][])data.toArray(),getTitresColonnes());
    		 return newTable;
    	 }
     
    	 private Object[] getTitresColonnes()
    	 {
    		 // Faudrait retourner un array de String contenant les titres des colonnes ici...
    	 }
    J'ai codé ça directement ici... il se peut que j'ai fait une ou deux erreurs de syntaxe Je l'ai fait à titre d'exemple pour t'aider à comprendre

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Par défaut
    Merci infiniment pour votre réponse et conseil .

    En faîte effectivement j'ai de très grandes liste, donc surement je vais avoir problème de rafraichissement, donc il vaut mieux changer directement dans le model de la table?.Chose que je maîtrise pas mais je vais y chercher .

    Merci d'avance.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Par défaut
    Et voilà, maintenant j'arrive bien a modifier directement dans le modèle.
    j'utilise l'instruction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.jTable1.getModel().setValueAt("test de modification", 2, 3);
    vous pensez que c'est la bonne méthode?.

    Merci d'avance.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Par défaut
    Resalut,
    j'arrive a modifier le contenu des colonnes, mais j'arrive pas à supprimer des lignes (je veux supprimer des lignes directement de mon tablemodel et rajouter des nouveaux lignes).

    Pouvez-vous m'indiquer comment supprimer une ligne?.

    Merci d'avance.

  6. #6
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Ca dépend du modèle choisit !
    Celui par défaut est DefaultTableModel :
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de Raffraichissement / Affichage jTable
    Par Dylest dans le forum Composants
    Réponses: 4
    Dernier message: 21/04/2015, 09h37
  2. Problème de raffraichissement.
    Par kurul1 dans le forum OpenGL
    Réponses: 6
    Dernier message: 06/02/2006, 17h46
  3. [Jtable] problème de suppression dans une Jtable
    Par gianni17 dans le forum Composants
    Réponses: 1
    Dernier message: 02/12/2005, 19h36
  4. Problème de raffraichissement de listes
    Par blondin01 dans le forum Access
    Réponses: 7
    Dernier message: 13/10/2005, 13h31
  5. [awt] Problème de raffraichissement de composant
    Par FakuFaku dans le forum AWT/Swing
    Réponses: 13
    Dernier message: 21/07/2005, 19h32

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