Bonjour à tous,
Je m'adresse à vous car je n'arrive pas à résoudre mon problème et j'avais que je n'ai plus d'idée...
J'ai un tableau qui répertorie un nombre d'heures pour chaque personne pour chaque jour (un agenda en quelques sortes),
Pour afficher ce tableau, j'ai utilisé un JScrollPane, avec mes heures de travail dans la partie viewPort, les dates en RowHeader, et les personnes en ColumnHeader.
A l'affichage, c'est niquel, ca marche super bien. Par contre en impression, ca passe plus...
J'ai essayé d'implémenter la fonction print() de l'interface Printable comme suit :
Code :
- class GlobalScrollPane implements Printable {
- public int print(Graphics g, PageFormat pageFormat, int pageIndex) throws PrinterException {
- try {
- JViewport view = getViewport();
- Dimension dim = view.getViewSize();
- Dimension rhDim = getRowHeader().getViewSize();
- Dimension chDim = getColumnHeader().getViewSize();
- if (dim.height < pageFormat.getImageableHeight()*(pageIndex)) {
- System.out.println("no page on "+pageIndex);
- return NO_SUCH_PAGE;
- }
- System.out.println("page on "+pageIndex);
- System.out.println("view (lxh): "+dim.width+"x"+dim.height);
- System.out.println("row header (lxh): "+rhDim.width+"x"+rhDim.height);
- System.out.println("column header (lxh): "+chDim.width+"x"+chDim.height);
- System.out.println("pageFormat (lxh): "+pageFormat.getImageableWidth()+"x"+pageFormat.getImageableHeight());
- int heightOfVPPaint = (int)pageFormat.getImageableHeight();
- // si c'est la dernière page, le tableau doit être plus petit que la taille total de la page
- if (pageFormat.getImageableHeight()* (pageIndex+1) > dim.height) {
- heightOfVPPaint = (int)(dim.height - pageFormat.getImageableHeight()* (pageIndex));
- }
- heightOfVPPaint-=chDim.height;
- double scale = (pageFormat.getImageableWidth()-rhDim.width) / dim.width;
- System.out.println("scale "+scale);
- Graphics2D g2D = (Graphics2D)g;
- if (scale<1) g2D.scale(scale, scale);
- g2D.translate(pageFormat.getImageableX()+rhDim.width, pageFormat.getImageableY());
- getColumnHeader().printAll(g);
- System.out.println("chPrinted" );
- g2D.translate(-rhDim.width, chDim.height);
- getRowHeader().printAll(g);
- System.out.println("rhPrinted" );
- g2D.translate(rhDim.width, 0);
- view.printAll(g);
- System.out.println("viewPrinted" );
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- return PAGE_EXISTS;
- }
- }
|
donc déjà je test avec une seule page (20 personnes tiennent sur une seul page)
quand j'utilise uniquement
c'est bon, tout fonctionne, mais je n'ai que les heures (pas de dates ni de personne)
mais dès que j'utilise
Code :
- getRowHeader().printAll(g);
|
Il m'imprime ce qu'il veut... des fois 3 personnes, des fois 5, 10... Alors que j'en est 20 à imprimer...
Donc si quelqu'un avait une idée de ce que je peux faire pour essayer de résoudre ce problème... merci d'avance.
A bientôt.