/*
* This example is from the book "Java Foundation Classes in a Nutshell".
* Written by David Flanagan. Copyright (c) 1999 by O'Reilly & Associates.
* You may distribute this source code for non-commercial purposes only.
* You may study, modify, and use this example for any purpose, as long as
* this notice is retained. Note that this example is provided "as is",
* WITHOUT WARRANTY of any kind either expressed or implied.
*/
import java.awt.*;
import java.awt.print.*;
/**
* This wrapper class encapsulates a Component and allows it to be printed
* using the Java 2 printing API.
*/
public class PrintableComponent implements Printable {
// The component to be printed.
Component c;
/** Create a PrintableComponent wrapper around a Component */
public PrintableComponent(Component c) { this.c = c; }
/**
* This method is not part of the Printable interface. It is a method
* that sets up the PrinterJob and initiates the printing.
*/
public void print() throws PrinterException {
// Get the PrinterJob object
PrinterJob job = PrinterJob.getPrinterJob();
// Get the default page format, then allow the user to modify it
PageFormat format = job.pageDialog(job.defaultPage());
// Tell the PrinterJob what to print
job.setPrintable(this, format);
// Ask the user to confirm, and then begin the printing process
if (job.printDialog())
job.print();
}
/**
* This is the "callback" method that the PrinterJob will invoke.
* This method is defined by the Printable interface.
*/
public int print(Graphics g, PageFormat format, int pagenum) {
// The PrinterJob will keep trying to print pages until we return
// this value to tell it that it has reached the end.
if (pagenum > 0)
return Printable.NO_SUCH_PAGE;
// We're passed a Graphics object, but it can always be cast to Graphics2D
Graphics2D g2 = (Graphics2D) g;
// Use the top and left margins specified in the PageFormat Note
// that the PageFormat methods are poorly named. They specify
// margins, not the actual imageable area of the printer.
g2.translate(format.getImageableX(), format.getImageableY());
// Tell the component to draw itself to the printer by passing in
// the Graphics2D object. This will not work well if the component
// has double-buffering enabled.
c.paint(g2);
// Return this constant to tell the PrinterJob that we printed the page.
return Printable.PAGE_EXISTS;
}
}
|