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

Documents Java Discussion :

[iText] Boucle affichage données par colonne


Sujet :

Documents Java

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 54
    Points : 21
    Points
    21
    Par défaut [iText] Boucle affichage données par colonne
    Bonjour à tous,

    J'ai besoin d'afficher des données dans un tableau qui provient d'une base.

    donc j'ai créé mon tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Table table = new Table(8);
    			table.setWidths(new int[]{10,10,10,10,10,10,10,10});	
    			table.setWidth(100);
    			table.setPadding(0);
    et pour afficher mes données, je fait une boucle for du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(Objet monobjet : objets){
     
    	table.addCell(new Paragraph(monobjet.getNom,normal));
     }
    Mon problème est que les données s'affiche comme ceci :

    1 2 3 4 5 6 7 8
    9 10 11 12 13 14
    etc...

    Je voulais savoir si il y avait un moyen simple d'afficher comme ceci :

    1 4 7 10 13 16 19 22
    2 5 8 11 14 17 20 23
    3 6 9 12 15 18 21 24

    Merci à tous,

    Cordialement

  2. #2
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 239
    Points : 313
    Points
    313
    Par défaut
    Bonjour,

    Suggestion : vous pouvez trier votre collection "objets" avant de créer vos cellules

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 54
    Points : 21
    Points
    21
    Par défaut
    Oui, peut-être mais je dois trier comment pour avoir ce genre d'affichage?

  4. #4
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 239
    Points : 313
    Points
    313
    Par défaut
    Quel est le type de Collection de objets ?

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 54
    Points : 21
    Points
    21
    Par défaut
    c'est une ArrayList

    Merci pour ton aide.

    Cordialement

  6. #6
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 239
    Points : 313
    Points
    313
    Par défaut
    Voici une méthode de tri, un peu barbare et que je n'ai pas testée ... je vous laisse la comprendre / tester / modifier à votre goût ... le principe y est :
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    /**
     * Méthode qui tri un ArrayList en matrice 2D à nbColonnes colonnes. 
     * @param liste la liste à trier. 
     * @param nbColonnes le nombre de colonnes de la matrice. 
     * @return la matrice. 
     **/
    public ArrayList<ArrayList<E>> tri(ArrayList<E> liste, int nbColonnes) {
      // La matrice retournee
      ArrayList<ArrayList<E>> resultat;
     
      // La ligne courante
      ArrayList<E> listeCourante;
     
      // Variables temporaires
      int nbLignes, indiceColonneCourante;
     
      // Calcul du nombre de lignes de la matrice
      nbLignes = liste.size() / nbColonnes;
     
      // Initialisation de la matrice de retour
      resultat = new ArrayList<ArrayList<E>>(nbLignes);
     
      // Initialisation de l'indice de la colonne courante
      indiceColonneCourante = 0;
     
      // Initialisation de la ligne courante
      listeCourante = new ArrayList<E>(nbColonnes);
     
      // Ajout de la première ligne à la matrice
      resultat.add(listeCourante);
     
      // Parcours des éléments de la liste à trier
      for (E donneeCourante : liste) {
        if (indiceColonneCourante >= nbColonnes) {
          // Si l'indice de la colonne courante est égal au nombre de colonnes
     
          // Remise à 0 de l'indice de la colonne courante
          indiceColonneCourante = 0;
     
          // Création d'une nouvelle ligne
          listeCourante = new ArrayList<E>(nbColonnes);
     
          // Ajout de la nouvelle ligne dans la matrice
          resultat.add(listeCourante);
        } else {
            // Sinon, incrémentation de l'indice de la colonne courante
            indiceColonneCourante ++;
        }
        // Insertion de la valeur courante dans la matrice
        // dans la colonne courante (d'indice indiceColonneCourante)
        // et la ligne courante
        listeCourante.add(donneeCourante);
      }
      // Retour de la matrice
      return resultat;
    }
    et son utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int nbColonnes = 8;
    ArrayList<ArrayList<Objet>> listeListeObjets = tri(objets, int nbColonnes);
    // Parcours des lignes de la matrice
    for (ArrayList<Objet> listeObjetsCourante : listeListeObjets) {
      // Parcours des colonnes dans la ligne courante
      for (Objet monobjet: listeObjetsCourante) {
        // Ajout de l'objet courant
        table.addCell(new Paragraph(monobjet.getNom,normal));
      }
    }

  7. #7
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 54
    Points : 21
    Points
    21
    Par défaut
    Merci, je vais regarder ça et je te redis.

    Cordialement

  8. #8
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 54
    Points : 21
    Points
    21
    Par défaut
    Bon,j'ai regarder ton code, j'ai fais mes changement (Objet) mais il ne m'affiche rien, et aucunes erreurs...

    J'ai du code qu'y n'est pas utilisé dans la méthode tri : donneeCourante1, donneeCourante2;

    J'avoue que j'ai un peu de mal a comprendre ce que tu m'as mis...je débute

    Je te remercie de ton aide

    Cordialement

  9. #9
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 239
    Points : 313
    Points
    313
    Par défaut
    J'ai ajouté des commentaires et corrigé mon code (ajout d'un else ... ).
    Cela devrait mieux fonctionner, et est-ce que cela est plus clair ?

  10. #10
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 54
    Points : 21
    Points
    21
    Par défaut
    C'est un peu plus clair, maintenant j'ai mes données qui s'affiche mais toujours de la façon :

    1 2 3 4 5
    6 7 8 9 10


  11. #11
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 239
    Points : 313
    Points
    313
    Par défaut
    Désolé, je me suis trompé entre les lignes et les colonnes.
    Ceci devrait mieux fonctionner :
    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
    41
    42
    43
    /**
     * Méthode qui tri un ArrayList en matrice 2D à nbColonnes colonnes. 
     * @param liste la liste à trier. 
     * @param nbColonnes le nombre de colonnes de la matrice. 
     * @return la matrice. 
     **/
    public ArrayList<ArrayList<E>> tri(ArrayList<E> liste, int nbColonnes) {
      // La matrice retournee
      ArrayList<ArrayList<E>> resultat;
     
      // La ligne courante
      ArrayList<E> listeCourante;
     
      // Variables temporaires
      int nbLignes, indiceColonneCourante;
     
      // Calcul du nombre de lignes de la matrice
      nbLignes = liste.size() % nbColonnes == 0 
      	? liste.size() / nbColonnes 
      	: (1 + liste.size() / nbColonnes);
     
      // Initialisation de la matrice de retour
      resultat = new ArrayList<ArrayList<E>>(nbLignes);
     
      // Initialisation de l'indice de la ligne courante
      indiceLigneCourante = 0;
     
      // Initialisation de la ligne matrice
      for (int i = 0; i < nbLignes ; i ++) {
    	resultat.add(new ArrayList<E>(nbColonnes));
      }
     
      // Parcours des éléments de la liste à trier
      for (E donneeCourante : liste) {
    	if (indiceLigneCourante >= nbLignes) {
    		indiceLigneCourante = 0;
    	}
    	resultat.get(indiceLigneCourante).add(donneeCourante);
    	indiceLigneCourante ++;
      }
      // Retour de la matrice
      return resultat;
    }

  12. #12
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 239
    Points : 313
    Points
    313
    Par défaut
    J'ai modifié le calcul du nombre de lignes pour le cas où le nombre de colonnes n'est pas un diviseur du nombre total de cellules.

  13. #13
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 54
    Points : 21
    Points
    21
    Par défaut
    Ouaip ça marche déjà mieux, mais il y a encore un petit bug, c'est décalé au début, ca m'affiche du genre :

    1...3285 353...545 699...153 1053...305
    2967...50 2...1550 356...1576 700...63
    2642...264 2968...46 3...245 358...612
    2196...50 2643...206 4...4201 360...365
    2197...40 2644...119 5...300 361...315
    2198...121 2652...311 6...426 362...83
    2199...31 2655...166 7...168 363...361
    2200...45 2660...205 8...168 364...105

    Par contre comment je peux faire pour que dès que la colonne arrive en fin de page, au lieu de continuer la colonne sur une deuxième page, je veux qu'il démarre une nouvelle colonne?

    Je suppose qu'il faut que je rajoute un if et un colonne++ mais je sais pas comment détecter la fin de la page.

    En tout cas merci, ton code m'aide beaucoup, j'avais fait un peu le même principe mais j'avais des boucles dans des boucles et je ne trouvais pas ça très propre.

Discussions similaires

  1. [AC-2010] Boucle affichage données
    Par Lologolas dans le forum IHM
    Réponses: 3
    Dernier message: 25/11/2011, 16h39
  2. [2K8] Groupement de données par colonne
    Par abbepierre94 dans le forum SSRS
    Réponses: 7
    Dernier message: 02/12/2010, 17h59
  3. [MySQL] affichage données par rapport à une date
    Par johan0510 dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 10/03/2010, 15h28
  4. Affichage "grouper par colonne"
    Par gracouille dans le forum SharePoint
    Réponses: 0
    Dernier message: 27/05/2008, 16h30
  5. [PDO] afficher mes données par colonnes dynamiquement
    Par mariafan dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/07/2007, 09h52

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