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 :

ArrayList et JTable : obtenir un tableau viable


Sujet :

Composants Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut ArrayList et JTable : obtenir un tableau viable
    Bonjour !

    Merci tout d'abord a ceux qui prendront soin de me lire . C'est un problême simple , mais dont je ne vois pas l'issue ( et oui , débutant ) .

    Mais , voila le topo : je veux afficher une JTable dynamique , reliée a un tableModel de type AbstractTableModel. ce Type Model est fait d'un tableau pour les colonnes , et d'un ArrayList d'ArrayList pour les données ( le vector de vector est apparement déconseillé , et un object[][]est particulièrement pénible a maintenir... d'ou l'arrayList ) .7
    ma JTable doit me montrer le résultat de certaines tables d'une base de donnée.

    Mon problême consiste en un affichage étrange de ma JTable .

    Mais , j'ai 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    Object[] colonnes = {"nom de la profession","code","nom"};
     
      Query reqvisu = tabvisu.createQuery ("Select p.nom, e.code, e.nom from Profession p , Employes e where p = e.codeprofession");
     
     
    List<Object[]> listetab = reqvisu.getResultList();
     
    ArrayList  essai = new ArrayList();
    ArrayList<ArrayList> donnees = new ArrayList<ArrayList>();
     
     
    for (Object[] lis : listetab )
    {
       System.out.println(lis);
    for (int j =0 ; j<colonnes.length; j++ )
    {
    essai.add(lis[j]);
    }
     
    donnees.add(essai);
    }
     
    modelEmployes tabEmp2 = new modelEmployes(donnees,colonnes) {};
    tabEmp.setModel(tabEmp2)
    mon problême : j'ai la ligne 1 qui est affichée a toute les lignes .

    J'ai donc une boucle a mettre quelque part ... cependant , j'avoue bloquer quelque peu : normalement , le for (Object[] lis : listetab ) est sencé incrémenter les lignes de la liste obtenue via ma requete JPA.

    Une idée ?

    Cordialement,

    Cyg'

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Dans ton code, tu utilises toujours le même objet essai, dans lequel tu ajoutes toutes les données de listetab (donc au final essai est une liste qui contient listetab.lenght()*colonnes.length objets), et que tu ajoutes dans donnees (donc au final donnees est une liste qui contient listetab.length() fois le même objet essai).

    La solution : créer un nouvel objet à chaque passage dans la boucle.

    Et donc déplacer l'instanciation de la liste essai :
    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
     
    // liste de listes globale
    ArrayList<ArrayList> donnees = new ArrayList<ArrayList>();
     
    for (Object[] lis : listetab )
    {
       // liste à ajouter dans la liste de listes : on en crée une nouvelle !
       ArrayList essai = new ArrayList();
     
       for (int j = 0 ; j < colonnes.length ; j++ )
       {
          essai.add(lis[j]);
       }
     
       donnees.add(essai);
    }

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci bien , cela fonctionne ! j'avais pourtant remarqué les doublons fait par essai en placant des System.out.println(); ... mais je ne trouvais pas de solutions viables pour en arrêter le processus .

    Merci pour tes explications , aussi . comprendre un algorithme est plus interessant que de le lire J'éviterais ce genre d'erreur pour le futur .

    Cordialement,

    Cygrid.

    Hop , affaire résolue

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par Cygrid Voir le message
    Merci pour tes explications , aussi . comprendre un algorithme est plus interessant que de le lire J'éviterais ce genre d'erreur pour le futur .
    C'est un peu le but, Developpez c'est pas juste le site où on se fait faire le boulot par les autres

    Citation Envoyé par Cygrid Voir le message
    Hop , affaire résolue
    Dans ce cas clique sur le bouton

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    C'est un peu le but, Developpez c'est pas juste le site où on se fait faire le boulot par les autres
    Certe , nous sommes bien d'accord il s'agissait plus d'une volonté de politesse que d'un remerciement rêellement justifié .

    mh... histoire de ne pas faire de mono-ligne , je me permet de parler d'un second problême : dis moi , ya t'il une fonction spéciale pour sélectionner des méthodes écrites dans mon tablemodel ?

    je m'explique : sauf erreur de ma part , le setValueAt () ne me suffira pas ... il me faut écrire une méthode qui me permette de rajouter une ligne d'un coup dans mon tableau .

    C'est chose faite... cependant , lorsque je tente d'y faire appel via un tabEmp.??? , je ne la trouve pas dans la liste des méthodes proposés .

    Donc ou bien j'ai mal lié ma JTable et mon tableModel via l'exemple que tu as vu precedemment ( ce qui m'étonnerais , étant donné que les autres méthodes font effectivement un changement si je les modifient) , soit je n'appelle pas de la bonne manière...

    J'ai vadrouillé a droite a gauche , mais je ne trouve pas de réponses viables ... j'ai du louper quelque chose .

    Si tu as une indication , je suis preneur

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

Discussions similaires

  1. [JTable] Obtenir le N° de lignes et column cliquée
    Par Stef-78 dans le forum Composants
    Réponses: 3
    Dernier message: 10/09/2006, 18h59
  2. [jTable] Actualiser un tableau
    Par oOoOuuhmAn dans le forum Composants
    Réponses: 7
    Dernier message: 14/03/2006, 18h05
  3. [JTable] Obtenir des lignes de hauteur différente.
    Par Alec6 dans le forum Composants
    Réponses: 3
    Dernier message: 17/02/2006, 16h11
  4. [SQL] Obtenir un tableau à partir d'une liste
    Par JMO91 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/01/2006, 00h07
  5. Comment obtenir un tableau à taille variable ?
    Par marsupilami34 dans le forum Langage
    Réponses: 6
    Dernier message: 27/06/2005, 15h03

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