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 / Affichage jTable


Sujet :

Composants Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Problème de Raffraichissement / Affichage jTable
    Bonjour a tous,

    J'utilise pour un petit programme perso , un Jtable créer a partir de l'interface graphique de Netbeans il dois se mettre a jour lors d'un Evénement combobox ItemStateChanged .

    Mon probleme est quand je remplis le tableaux avec ma base de donnée j'utilise la méthode initComponents()
    Mon tableau s'affiche toujours vide , il ne se raffraichit pas et a cause de cette méthode un de mes boutons et label et le tableau se dupliquent (les données ne sont charger que dans le second tableau) et superposés . Quand j'agrandis la fenêtre je désuperpose les boutons et le second tableaux quand l'espace d'affichage de la page quand je clique sur une des cellules visible après aggrandissement de ma fenêtre.

    Je ne comprend pas bien ce qui se passe , voici mon code :
    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
     
    Connection c = null;
            Statement stmt = null;
        try {
          Class.forName("org.sqlite.JDBC");
          c = DriverManager.getConnection("jdbc:sqlite:C:\\Users\\dylan\\Desktop\\Chasses.sqlite");
              stmt = c.createStatement();
              // enregistrer les données dans le vecteur
     
              ResultSet rs = stmt.executeQuery("SELECT * FROM repertoir");
              data = new Vector<Vector<String>>();
              while(rs.next())
              {
                  Vector<String> Donnees = new Vector<String>();
                  Donnees.add(rs.getString(1));
                  Donnees.add(rs.getString(2));
                  data.add(Donnees);
              }
     
              // header du tableau
     
              header = new Vector<String>();
              header.add("Nom de l'indice");
              header.add("Position");
              initComponents();
              stmt.close();
              c.close();
        }
          catch ( Exception e ) {
          System.err.println( e.getClass().getName() + ": " + e.getMessage() );
          System.exit(0);
        }
        System.out.println("Tableau chargé");
        }
    Le code génerer par netbeans que j'ai modifier (clique droit sur le jTable + customiz code) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    jTable1 = new javax.swing.JTable();
     
    jTable1.setModel(new javax.swing.table.DefaultTableModel(
        data,header
    ));
     
    jScrollPane1.setViewportView(jTable1);
    Merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Il y a plusieurs états dans un "itemStateChange" : la méthode sera appelée plusieurs fois avec différents états
    Par exemple, ne traiter que l'état "item sélectionné" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(e.getStateChange() == ItemEvent.SELECTED) {
       // faire le traitement
    }
    Ensuite, si tu vois apparaitre plusieurs fois des boutons ou la JTable, c'est donc que non seulement l'évenement est appelé plusieurs fois, mais qu'en plus le code qui est appelé reconstruit des nouveaux composants (boutons et JTable), au lieu de simplement changer les données dans la JTable, ce qui peut se faire par exemple en recréant un modèle et en le changeant sur la JTable (qui elle est créé au départ, au moment où toute l'interface est créée).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    D'accord donc avec un modèle que j'aurais créer, j'aurais dans l'itemstatechange à créer mon modele lui donner mes nouvelles données et remplacer le modele du jTable par ce nouveau ?

    Est ce que je peut passer par les vectors pour créer mon modele ? un peu comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class Model
    	  extends AbstractTableModel{ 
       private Vector<Vector<String>> data;
       private Vector<String> header;
       public Model(
          Vector<Vector<String>> data,Vector<String> header){ 
          this.data= data; 
          this.header = header; 
       } 
       @Override public int getColumnCount(){ 
          String[] transfer = header.toArray(new String[header.size()]);
          return transfer[0].length();
       }
    }
    merci pour ton aide

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Tu peux utiliser directement un DefaultTableModel, et tu pourras directement utiliser des Vector.

    Il vaut mieux d'ailleurs peut-être, parce que quand je vois ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @Override 
    public int getColumnCount(){ 
          String[] transfer = header.toArray(new String[header.size()]);
          return transfer[0].length();
    }
    ça dit que le nombre de colonnes de la JTable est le nombre de caractères du titre de la première colonne (de manière plutôt compliquée en plus, parce qu'on pourrait faire return header.get(0).length() !

    Pourquoi ne pas écrire tout simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @Override 
    public int getColumnCount(){ 
       return header.size();
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Oui , effectivement après une petite pause et une nuit de sommeil , j'ai eu les idées plus claires lol .
    C'est ce que j'ai fais , j'ai créer une méthode "refreshtab" ou j'y remplis mes vecteur , déclare un nouveau defaut model et le remplace dans le tableau ceci fonctionne très bien et pour le itemstatechange , je gere mon événement avec un if pour éviter qu'il lance l’événement sur la sélection et déselection avec une simple condition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if(evt.getStateChange()== java.awt.event.ItemEvent.SELECTED)
    {
    // mon code
    }
    else
    {
    // rien ne se passe 
    }
    Parfois quand on cherche trop et commence a raconter des bétises une petite pause suffit pour éclairer sa lanterne Lol .
    Bref mon application est terminée merci a toi pour ton aide

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

Discussions similaires

  1. Problème d'affichage JTable (lignes triplées)
    Par DLProject dans le forum Composants
    Réponses: 3
    Dernier message: 13/02/2012, 17h28
  2. Problème de raffraichissement d'un JTable.
    Par amine1980 dans le forum Composants
    Réponses: 7
    Dernier message: 08/04/2011, 14h43
  3. Réponses: 3
    Dernier message: 08/10/2010, 18h08
  4. problème pour l'affichage bdd dans un JTable
    Par ciolvic dans le forum Débuter
    Réponses: 1
    Dernier message: 29/04/2009, 14h14
  5. Problème affichage JTable
    Par matt8-5 dans le forum Composants
    Réponses: 3
    Dernier message: 03/04/2007, 18h25

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