PrintFrame.java — Java Component Printing Demo

 

Download PrintFrame.java source file

// I don't know remember where I found this demo, I think it was
// from Cay Horstman's "Core Java vol. 2".
// Adapted by Wayne Pollock, Tampa Florida USA.

import java.awt.*;
import java.awt.event.*;
import java.awt.print.*;
import javax.swing.*; 

public class PrintFrame extends JFrame implements Printable
{
   public static void main ( String [] args )
   {
      PrintFrame pf = new PrintFrame();
      pf.setVisible( true );
   }

   public PrintFrame()
   {
      super( "PrintFrame v1.0" );

      // Create and lay out components:

      JPanel panel = new JPanel();
        JButton printButton = new JButton( "Print" );
        panel.add( printButton );
        panel.add( new JList(new Object[] { "One", "Two", "Three" }) );
        panel.add( new JButton("Push me"));
        panel.add( new JCheckBox("Chess", true));
        panel.add( new JComboBox(new Object[] { "Eins", "Zwei", "Drei" }) );

      setContentPane( panel );
      setSize(400, 400);

      // Center the Frame on the screen:
      Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
      Dimension frameSize = getSize();
      int x = (screenSize.width - frameSize.width) / 2;
      int y = (screenSize.height - frameSize.height) / 2;
      setLocation( x, y );

      // Hook up event handling:

      printButton.addActionListener( new ActionListener() {
         public void actionPerformed ( ActionEvent ae )
         {
            PrinterJob pj = PrinterJob.getPrinterJob();
            pj.setPrintable( PrintFrame.this );
            if ( pj.printDialog() )
            {
               try { pj.print(); }
               catch ( PrinterException pe )
               {
                  System.out.println( pe );
               }
            }
         }
      });

      setDefaultCloseOperation( EXIT_ON_CLOSE );
   }

  
   public int print ( Graphics gr, PageFormat pf, int pageIndex )
   {
      if (pageIndex != 0)  // We know we only have one page to print
         return NO_SUCH_PAGE;

      Graphics2D g = (Graphics2D) gr;

      // Translate the origin (0,0 point) to the upper left:
      g.translate(pf.getImageableX(), pf.getImageableY());

      getContentPane().paint( g );  // Let the component paint itself!

      return PAGE_EXISTS;
   }
}