begin process at 2012 02 15 16:55:56
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Java

 > 

Archives

 > 

Au secours

 > 

Pb d'impression avec un tableau + 1 jPanel


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Pb d'impression avec un tableau + 1 jPanel

jeudi 11 août 2005 à 23:03:39 | Pb d'impression avec un tableau + 1 jPanel

kobee12

Bonjour à tous,

voila plusieurs jours que je me prends la tetes à trouver une façon d'imprimer un tableau, avec un jPanel à sa gauche.
Ce jPanel a la même taille que le tableau y comprise l'en-tête.
J'utilise PDF995 pour avoir un aperçu de ce que ça donnerait en vrai.
Et le résultat est comme l'image ci-dessous :



Ce qui se passe, c'est que le jPanel n'est pas peint jusqu'à la meme position Y que le tableau et deborde alors sur la marge de bas de page.
Mon tableau qui s'imprime correctement sur 3 pages a donc le jPanel qui lui apparait à chaque fois plus grand que le tableau.

Voici le code de ma fonction print :

  public int print(Graphics g, PageFormat pageFormat,
                   int pageIndex) throws PrinterException {
    // Declaration du graphe
    Graphics2D g2 = (Graphics2D) g;
    // definition de la couleur du graphe
    g2.setColor(Color.black);
    int fontHeight = g2.getFontMetrics().getHeight();
    int fontDesent = g2.getFontMetrics().getDescent();

    //leave room for page number
    // DIMENSION DE LA PAGE
    // Hauteur de la page
    double pageHeight =
        pageFormat.getImageableHeight() - fontHeight;
    // Largeur de la page
    double pageWidth =
        pageFormat.getImageableWidth();
    // Largeur des dates
    double panelDateWidth = pere.jPanelDate.getWidth();
    // Largeur des heures
    double panelHourWidth = pere.jPanelDate.getWidth();
    // Largeur du tableau
    double tableWidth = (double)
        pere.tableMois.jTableMois.getColumnModel().getTotalColumnWidth();

    // Rapport entre la taille reelle et la taille sur la feuille
    double scale = 1;
    if ( (tableWidth + panelDateWidth + panelHourWidth) >= pageWidth) {
      scale = pageWidth / (tableWidth + panelDateWidth + panelHourWidth);
    }

    // Largeur des dates sur la page
    double panelDateWidthOnPage = panelDateWidth * scale;
    // Largeur des heures sur la page
    double panelHourWidthOnPage = panelHourWidth * scale;
    // Hauteur des en-tetes sur la page
    double headerHeightOnPage =
        pere.tableMois.jTableMois.getTableHeader().getHeight() * scale;
    // Largeur du tableau sur la page
    double tableWidthOnPage = tableWidth * scale;
    // Hauteur d'une cellule
    double oneRowHeight = (pere.tableMois.jTableMois.getRowHeight() +
                           pere.tableMois.jTableMois.getRowMargin()) * scale;
    // Nombre de lignes sur une page
    int numRowsOnAPage =
        (int) ( (pageHeight - headerHeightOnPage) /
               oneRowHeight);
    // Hauteur de la page pour le tableau
    double pageHeightForTable = oneRowHeight * numRowsOnAPage;
    // Nombre total de pages
    int totalNumPages =
        (int) Math.ceil( (
            (double) pere.tableMois.jTableMois.getRowCount()) /
                        numRowsOnAPage);
    if (pageIndex >= totalNumPages) {
      return NO_SUCH_PAGE;
    }

    // Positionnement en haut à gauche de la zone imprimable
    g2.translate(pageFormat.getImageableX(), // coordonnée x du coin haut gauche de la zone imprimable de la page
                 pageFormat.getImageableY()); // coordonnée y du coin haut gauche de la zone imprimable de la page

    //bottom center
    g2.drawString("Page: " + (pageIndex + 1),
                  (int) pageWidth / 2 - 35, (int) (pageHeight
        + fontHeight - fontDesent));

    /**
     * On peint le panel des dates
     **/
    g2.translate(0f, -pageIndex * pageHeightForTable);

    //If this piece of the table is smaller
    //than the size available,
    //clip to the appropriate bounds.
    if (pageIndex + 1 == totalNumPages) {
      int lastRowPrinted =
          numRowsOnAPage * pageIndex;
      int numRowsLeft =
          pere.tableMois.jTableMois.getRowCount() - lastRowPrinted;
      g2.setClip(0,
                 (int) (pageHeightForTable * pageIndex),
                 (int) Math.ceil(panelDateWidthOnPage),
                 (int) Math.ceil(oneRowHeight * numRowsLeft));
    }
    //else clip to the entire area available.
    else {
      g2.setClip(0,
                 (int) (pageHeightForTable * pageIndex),
                 (int) Math.ceil(panelDateWidthOnPage),
                 (int) Math.ceil(pageHeightForTable));
    }

    g2.scale(scale, scale);
    pere.jPanelDate.paint(g2);
    /**
     * On peint le tableau
     **/
    g2.scale(1 / scale, 1 / scale);
    g2.translate(panelHourWidthOnPage, headerHeightOnPage);
    //If this piece of the table is smaller
    //than the size available,
    //clip to the appropriate bounds.
    if (pageIndex + 1 == totalNumPages) {
      int lastRowPrinted =
          numRowsOnAPage * pageIndex;
      int numRowsLeft =
          pere.tableMois.jTableMois.getRowCount() - lastRowPrinted;
      g2.setClip(0,
                 (int) (pageHeightForTable * pageIndex),
                 (int) Math.ceil(tableWidthOnPage),
                 (int) Math.ceil(oneRowHeight * numRowsLeft));
    }
    //else clip to the entire area available.
    else {
      g2.setClip(0,
                 (int) (pageHeightForTable * pageIndex),
                 (int) Math.ceil(tableWidthOnPage),
                 (int) Math.ceil(pageHeightForTable));
    }

    /*
     scale(xratio, yratio) : Redimensionne le contexte graphique 2D par le ratio en
     paramètre. Un ratio de 1 maintient la taille actuelle, et inférieur à 1, va réduire le
     contexte graphique.
     */
    g2.scale(scale, scale);
    pere.tableMois.jTableMois.paint(g2);
    /**
     * On peint les en-tetes en haut du tableau
     **/
    g2.scale(1 / scale, 1 / scale);
    g2.translate(0f, pageIndex * pageHeightForTable);
    g2.translate(0f, -headerHeightOnPage);
    g2.setClip(0, 0,
               (int) Math.ceil(tableWidthOnPage),
               (int) Math.ceil(headerHeightOnPage));
    g2.scale(scale, scale);
    pere.tableMois.jTableMois.getTableHeader().paint(g2);
    //paint header at top

    return Printable.PAGE_EXISTS;
  }

Voila.
Donc si qu'elqu'un peut m'eclaircir les impressions en java, ça m'aiderait bien.

Kobee12



Cette discussion est classée dans : page, int, double, scale, g2


Répondre à ce message

Sujets en rapport avec ce message

Imprimer une jtable AVEC UN TITRE [ par asetti ] slt,grâce au source que l'on ma donner je suis arriver à imprimer une jtable.mon probleme est que ça fait depuis 8h ce matin que je cherche comment im Imprimer que les lignes rempli d'une jTable [ par asetti ] salut,j'ai créer un programme qui, entre autre, imprime une jTable.mon seul problème c'est qu'il imprime toute les lignes même celle qui n'ont pas ét Impression impossible [ par calimero13 ] Bonjour à tous,depuis jeudi, je bloque sur des impressions de panels comprenant images et autres (label, texte ...).En général , j'obtiens des pages b Imprimer en Paysage une table JTABLE avec le code ci-joint, qui fait deja du resize de table et multipage print ! [ par icarusomega ] Salut,J ai bossé pas mal de temps pour essayer de modifier l impression en format paysage mais je n y arrive pas, je vous passerai mes modifs de guerr convertir un double en int [ par clav ] bonjour,je suis un tout novice en java (3jours...) et je souhaiterais afficher a l'écran une variable déclarée comme "double" sous la forme d'un entie Probleme dans mon programme fractale [ par Jarod1980 ] Bonjour tout le monde,J'aurais besoin d'aide pour résoudre un petit problème. J'ai adapté un programme que j'ai fais en C (fractale de Julia) en Java. Aide pour faire un zoom [ par Jarod1980 ] Bonjour tout le monde,J'aurais besoin d'aide pour faire un zoom par exemple un zoom de selection rectangulaire qui agrandit la zone voulue sur un prog problem avec JTable svp aidez moi [ par yacir ] salut tout le monde  g un petit probleme avec ce programme:il consiste à faire la soustration entre 2 valeurs de 2 cellules de JTable et il affiche le problème Paper.size [ par akrobat1664 ] Bonjour à tous, à un moment donné je dois réalisé une impression sur une étiquette qui fait 102 X 52 mm. J'ai donc essayé de redimensionner le format redimensionnement de JPEG et EXIF [ par Neo3004 ] Je cherche une solution à un problème depuis un moment : <font face="Arial" si


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,530 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales