Bonjour, j'utilise un exemple trouvé sur internet pour imprimer mais je souhaiterais mettre des entete et des pied de page, mais je ne comprends vraiment pas comment fonctionne la méthode translate(x,y)

dans l'exemple que j'ai trouvé il l'utilise deux fois de suite et vraiment je ne comprends pas l'utilité.
Aussi la page que j'imprime de me convient pas, les marges sont beaucoup trop grosse. Je crois que cela vient de PageFormat, mais comment faire pour les modifier ?

voici le code de mon exemple :
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
 
 Graphics2D g2 = (Graphics2D) g;
    g2.setColor(Color.black);
    int fontHeight = g2.getFontMetrics().getHeight();
    int fontDescent = g2.getFontMetrics().getDescent();
 
    // Laisser de l'espace pour le numero de page
    double pageHeight = pageFormat.getImageableHeight() - (3*fontHeight);
    double pageWidth = pageFormat.getImageableWidth();
    double tableWidth = tableToPrint.getColumnModel().getTotalColumnWidth();
    double scale = 1;
 
    if (tableWidth >= pageWidth) {
      scale = pageWidth / tableWidth;
    }
 
    double headerHeightOnPage = tableToPrint.getTableHeader().getHeight() * scale;
    double tableWidthOnPage = tableWidth * scale;
 
    double oneRowHeight = (tableToPrint.getRowHeight() + tableToPrint.getRowMargin()) * scale;
 
    int numRowsOnAPage = (int) ((pageHeight - headerHeightOnPage) / oneRowHeight);
 
    double pageHeightForTable = oneRowHeight * numRowsOnAPage;
 
    int totalNumPages = (int) Math.ceil(((double) tableToPrint.getRowCount()) / numRowsOnAPage);
 
    if (pageIndex >= totalNumPages)
      return NO_SUCH_PAGE;
 
    g2.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
    // en bas au centre Pied de page
    g2.drawString("Page : " + (pageIndex + 1), (int) pageWidth / 2 - 35, (int) (pageHeight
        + fontHeight - fontDescent));
 
    g2.translate(0f, headerHeightOnPage);
    g2.translate(0f, -pageIndex * pageHeightForTable);
 
 
    // si cette partie de la page est plus petite
    // que la taille disponible, alors découper les contours appropriés
    if (pageIndex + 1 == totalNumPages) {
      int lastRowPrinted = numRowsOnAPage * pageIndex;
      int numRowsLeft = tableToPrint.getRowCount() - lastRowPrinted;
 
      g2.setClip(0, (int) (pageHeightForTable * pageIndex), (int) Math.ceil(tableWidthOnPage),
          (int) Math.ceil(oneRowHeight * numRowsLeft));
    }
    // sinon découper la zone disponible toute entière
    else {
      g2.setClip(0, (int) (pageHeightForTable * pageIndex), (int) Math.ceil(tableWidthOnPage),
          (int) Math.ceil(pageHeightForTable));
    }
 
    g2.scale(scale, scale);
 
    tableToPrint.paint(g2);
 
    // dessiner les entêtes des colonnes en haut.
    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);
    tableToPrint.getTableHeader().paint(g2);
 
 
// Ca c'est moi qui l'ai rajouté et biensur cela ne fonctionne pas....
    g2.translate(0f, headerHeightOnPage);
    g2.translate(0f, -pageIndex * pageHeightForTable);
 
    // en haut au centre
    g2.drawString("EN-TETE ", (int) pageWidth / 2 - 35, fontHeight);
    return Printable.PAGE_EXISTS;
Le probleme est que comme je ne comprends rien au translate, je n'arrive pas à afficher mon entete.
Note : En fait je veux imprimer une JTable avec en tete...

Si vous avez des solutions... Merci d'avance.