import java.awt.Graphics;
import java.awt.print.PageFormat;
import java.awt.print.Pageable;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;

import javax.swing.SwingUtilities;

public class Print implements Printable, Pageable {
        private PageFormat pf;

        public Print() {
        }

        public Print(PageFormat pf) {
                this.pf = pf;
        }

        public int print(Graphics g, PageFormat pf, int pageIndex)
throws PrinterException {
                g.translate((int) pf.getImageableX(), (int) pf.getImageableY());
                new DrawPanel().paintComponent(g);
                return Printable.PAGE_EXISTS;
        }

        public int getNumberOfPages() {
                return 1;
        }

        public PageFormat getPageFormat(int pageIndex) throws
IndexOutOfBoundsException {
                return pf;
        }

        public Printable getPrintable(int pageIndex) throws
IndexOutOfBoundsException {
                return this;
        }

        public static void main(String[] args) {
                SwingUtilities.invokeLater(new Runnable() {
                        @Override
                        public void run() {
                                try {
                                        PrinterJob job =
PrinterJob.getPrinterJob();
                                        Print printable = new
Print(job.defaultPage());
                                        job.setPrintable(printable);
                                        job.setPageable(printable);
                                        if (job.printDialog()) {
                                                job.print();
                                        }
                                } catch (PrinterException e) {
                                        e.printStackTrace();
                                }
                        }
                });
        }
}
