Another print demo
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.print.PageFormat; import java.awt.print.Printable; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class AnotherPrintDemo extends JFrame { DrawingCanvas canvas; JButton setUpButton = new JButton("Page Setup"); JButton printButton = new JButton("Print"); JButton cancelButton = new JButton("Cancel"); public AnotherPrintDemo() { super(); Container container = getContentPane(); canvas = new DrawingCanvas(); container.add(canvas); JPanel panel = new JPanel(new GridLayout(1, 3)); ButtonListener buttonListener = new ButtonListener(); setUpButton.addActionListener(buttonListener); panel.add(setUpButton); printButton.addActionListener(buttonListener); panel.add(printButton); cancelButton.addActionListener(buttonListener); panel.add(cancelButton); container.add(BorderLayout.SOUTH, panel); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); setSize(650, 275); setVisible(true); } class ButtonListener implements ActionListener { PrinterJob printJob; PageFormat pageFormat; PrintableCanvas printableCanvas; ButtonListener() { printJob = PrinterJob.getPrinterJob(); pageFormat = printJob.defaultPage(); } public void actionPerformed(ActionEvent e) { JButton tempButton = (JButton) e.getSource(); if (tempButton.equals(setUpButton)) { pageFormat = printJob.pageDialog(pageFormat); printJob.validatePage(pageFormat); } else if (tempButton.equals(printButton)) { printableCanvas = new PrintableCanvas(pageFormat); printJob.setPrintable(printableCanvas); boolean ok = printJob.printDialog(); if (ok) { try { printJob.print(); } catch (Exception pe) { System.out.println("Printing Exception Occured!"); pe.printStackTrace(); } } } else if (tempButton.equals(cancelButton)) { printJob.cancel(); } } } public static void main(String arg[]) { new AnotherPrintDemo(); } } class DrawingCanvas extends JPanel { Font font; FontMetrics fontMetrics; int w, h; DrawingCanvas() { setBackground(Color.white); setSize(400, 275); w = this.getWidth(); h = this.getHeight(); font = new Font("Dialog", Font.BOLD, 50); fontMetrics = getFontMetrics(font); } public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2D = (Graphics2D) g; paintContent(g2D, w, h); } public void paintContent(Graphics2D g2D, int w, int h) { g2D.setFont(font); g2D.drawString("Java Source and Support", 0, (float) (0.5 * h - 1.25 * fontMetrics.getHeight())); } } class PrintableCanvas implements Printable { DrawingCanvas canvas; PageFormat pageFormat; public PrintableCanvas(PageFormat pf) { pageFormat = pf; } public int print(Graphics g, PageFormat pageFormat, int pageIndex) throws PrinterException { if (pageIndex >= 1) { return Printable.NO_SUCH_PAGE; } Graphics2D g2D = (Graphics2D) g; canvas = new DrawingCanvas(); canvas.paintContent(g2D, (int) pageFormat.getImageableWidth(), (int) pageFormat.getImageableHeight()); // successful printing of the page return Printable.PAGE_EXISTS; } }