Impression de plusieurs composants graphiques contenus dans un JPanel
Bonsoir à tous
je suis entrain d'améliorer mon application de gestion pour une librairie et je suis entrain de développer la partie d'impression
je veux imprimer un jPanel qui lui même contenu dans une jFrame, contient des jLabel et une jTable
j'ai reussi après une recherche sur google à imprimer le contenu du jPanel mais le resultat pour la jTable est seulement la partie affichée à l'écran
voici le code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
Properties props = new Properties();
props.setProperty("awt.print.paperSize", "a4");
props.setProperty("awt.print.destination", "printer");
PrintJob demandeDImpression = getToolkit().getPrintJob(this, "Impression", props);
if (demandeDImpression != null) {
Graphics gImpr = demandeDImpression.getGraphics();
jPanel5.printAll(gImpr);
gImpr.dispose();
demandeDImpression.end();
}
} |
et j'ai trouvée une soution pour la jTable mais elle s'imprime sans les jLabels
Code:
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 75 76 77 78
|
private void jButton9ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
PrinterJob pj = PrinterJob.getPrinterJob();
pj.setPrintable(GererClientsCreditsVentes.this);
pj.printDialog();
try
{
pj.print();
}
catch (Exception PrintException)
{
}
}
public int print(Graphics g, PageFormat pageFormat, int pageIndex)throws PrinterException
{
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() - fontHeight;
double pageWidth = pageFormat.getImageableWidth();
double tableWidth = (double)jTableListeProduits.getColumnModel().getTotalColumnWidth();
double scale = 1;
if (tableWidth >= pageWidth)
{
scale = pageWidth / tableWidth;
}
double headerHeightOnPage = jTableListeProduits.getTableHeader().getHeight()*scale;
double tableWidthOnPage = tableWidth * scale;
double oneRowHeight = (jTableListeProduits.getRowHeight() + jTableListeProduits.getRowMargin())*scale;
int numRowsOnAPage = (int)((pageHeight-headerHeightOnPage) / oneRowHeight);
double pageHeightForTable = oneRowHeight * numRowsOnAPage;
int totalNumPages = (int)Math.ceil(((double)jTableListeProduits.getRowCount()) / numRowsOnAPage);
if (pageIndex >= totalNumPages)
return NO_SUCH_PAGE;
g2.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
// en bas au centre
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 = jTableListeProduits.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));
}
jLabelSousTitre43.paint(g2);
jLabelClientSelectionne1.paint(g2);
jLabelSousTitre45.paint(g2);
g2.scale(scale, scale);
jTableListeProduits.paint(g2);
// dessiner les entêtes 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);
jTableListeProduits.getTableHeader().paint(g2);
return Printable.PAGE_EXISTS;
} |
je veux savoir comment faire pour mélanger ces deux solutions en imprimant tout le contenu du jTable avec les jLabels
merci beaucoup de me fournir de l'aide