[JScrollPane] problème d'impression

problème d'impression [JScrollPane] - Java - Programmation

Marsh Posté le 04-12-2008 à 10:53:06    

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 :
  1. class GlobalScrollPane implements Printable {
  2. public int print(Graphics g, PageFormat pageFormat, int pageIndex) throws PrinterException {
  3.  try {
  4.   JViewport view = getViewport();
  5.   Dimension dim = view.getViewSize();
  6.   Dimension rhDim = getRowHeader().getViewSize();
  7.   Dimension chDim = getColumnHeader().getViewSize();
  8.   if (dim.height < pageFormat.getImageableHeight()*(pageIndex)) {
  9.    System.out.println("no page on "+pageIndex);
  10.    return NO_SUCH_PAGE;
  11.   }
  12.   System.out.println("page on "+pageIndex);
  13.   System.out.println("view (lxh): "+dim.width+"x"+dim.height);
  14.   System.out.println("row header (lxh): "+rhDim.width+"x"+rhDim.height);
  15.   System.out.println("column header (lxh): "+chDim.width+"x"+chDim.height);
  16.   System.out.println("pageFormat (lxh): "+pageFormat.getImageableWidth()+"x"+pageFormat.getImageableHeight());
  17.   int heightOfVPPaint = (int)pageFormat.getImageableHeight();
  18.   // si c'est la dernière page, le tableau doit être plus petit que la taille total de la page
  19.   if (pageFormat.getImageableHeight()* (pageIndex+1) > dim.height) {
  20.    heightOfVPPaint = (int)(dim.height - pageFormat.getImageableHeight()* (pageIndex));
  21.   }
  22.   heightOfVPPaint-=chDim.height;
  23.   double scale = (pageFormat.getImageableWidth()-rhDim.width) / dim.width;
  24.   System.out.println("scale "+scale);
  25.   Graphics2D g2D = (Graphics2D)g;
  26.   if (scale<1) g2D.scale(scale, scale);
  27.   g2D.translate(pageFormat.getImageableX()+rhDim.width, pageFormat.getImageableY());
  28.   getColumnHeader().printAll(g);
  29.   System.out.println("chPrinted" );
  30.   g2D.translate(-rhDim.width, chDim.height);
  31.   getRowHeader().printAll(g);
  32.   System.out.println("rhPrinted" );
  33.   g2D.translate(rhDim.width, 0);
  34.   view.printAll(g);
  35.   System.out.println("viewPrinted" );
  36.  } catch (Exception ex) {
  37.   ex.printStackTrace();
  38.  }
  39.  return PAGE_EXISTS;
  40. }
  41. }


 
donc déjà je test avec une seule page (20 personnes tiennent sur une seul page)
 
quand j'utilise uniquement
 

Code :
  1. view.printAll(g);


 
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 :
  1. 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.

Reply

Marsh Posté le 04-12-2008 à 10:53:06   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed