Imprimir los Contenidos de un Componente
Cualquier cosa que podamos dibujar en la pantalla también puede ser imprimida. Podemos
fácilmente usar un 'printable job' para imprimir el contenido de un componente.
Ejemplo: ShapesPrint
En este ejmplo usamos el mismo código de dibujo para mostrar e imprimir los contenidos de
un componente. Cuando el usuario pulsa sobre el botón print, se crea un 'print job' y se
llama a printDialog para mostrar el diálogo de impresión. Si el
usuario contínua con el trabajo, el proceso de impresión se inicia, y el sistema de
impresión llama a print cuando sea necesario renderizar el trabajo a
la impresora.
ShapesPrint es el 'page painter'. Su método
print llama a drawShapes para realizar el dibujo del
'print job'. (También se llama al método drawShapes por parte de
paintComponent para dibujar en la pantalla.)
public class ShapesPrint extends JPanel
implements Printable, ActionListener {
...
public int print(Graphics g, PageFormat pf, int pi)
throws PrinterException {
if (pi >= 1) {
return Printable.NO_SUCH_PAGE;
}
drawShapes((Graphics2D) g);
return Printable.PAGE_EXISTS;
}
...
public void drawShapes(Graphics2D g2) {
Dimension d = getSize();
int gridWidth = 400/6;
int gridHeight = 300/2;
int rowspacing = 5;
int columnspacing = 7;
int rectWidth = gridWidth - columnspacing;
int rectHeight = gridHeight - rowspacing;
...
int x = 85;
int y = 87;
...
g2.draw(new Rectangle2D.Double(x,y,rectWidth,rectHeight));
...
El código de control del trabajo está en el método actionPerformed
de ShapesPrint
public void actionPerformed(ActionEvent e) {
if (e.getSource() instanceof JButton) {
PrinterJob printJob = PrinterJob.getPrinterJob();
printJob.setPrintable(this);
if (printJob.printDialog()) {
try {
printJob.print();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
Puedes encontrar el código completo de este programa en ShapesPrint.java
.