java - ¿Cómo puedo imprimir un solo contenido de JPanel?
swing printing (3)
Tengo un JPanel
con dos etiquetas con fotos. Necesito imprimir estos contenidos de JPanel
. Por favor, ayúdame. ¿Cómo puedo imprimir solo el contenido de este JPanel
, ya que también tengo diferentes componentes en mi JFrame
pero solo necesito imprimir este JPanel
?
Gracias.
Aquí hay un ejemplo para imprimir cualquier componente Swing.
public void printComponenet(Component component){
PrinterJob pj = PrinterJob.getPrinterJob();
pj.setJobName(" Print Component ");
pj.setPrintable (new Printable() {
public int print(Graphics pg, PageFormat pf, int pageNum){
if (pageNum > 0){
return Printable.NO_SUCH_PAGE;
}
Graphics2D g2 = (Graphics2D) pg;
g2.translate(pf.getImageableX(), pf.getImageableY());
component.paint(g2);
return Printable.PAGE_EXISTS;
}
});
if (pj.printDialog() == false)
return;
try {
pj.print();
} catch (PrinterException ex) {
// handle exception
}
}
Una forma sencilla de hacerlo sería implementar la interfaz de print
(en java.awt.print
) y agregar el método de print
especificado (funciona de forma similar a la paint
aquí puede especificar qué componentes desea dibujar en la página impresa). ). Y cuando desee imprimir realmente el contenido del panel, obtenga una instancia de PrinterJob
y llame a su método setPrintable
, pasando el objeto que implementó Printable
.
Sin embargo, eso es sólo una visión general rápida. Recomiendo echar un vistazo al tutorial de Sun sobre impresión para obtener más información.
simplemente edite y ponga el nombre de su marco, panel (jPanel1) y botón (imprimir). ''esto'' se refiere a la clase JFrame (es decir, mi clase extiende javax.swing.JFrame) simplemente coloca la referencia de tu marco en lugar de ''esto''.
private void PritnActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
Toolkit tkp = jPanel1.getToolkit();
PrintJob pjp = tkp.getPrintJob(this, null, null);
Graphics g = pjp.getGraphics();
jPanel1.print(g);
g.dispose();
pjp.end();
}