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; } }