001 package org.mesopotamia.util; 002 003 import java.awt.Component; 004 import java.awt.Graphics; 005 import java.awt.Graphics2D; 006 import java.awt.print.PageFormat; 007 import java.awt.print.Printable; 008 import java.awt.print.PrinterException; 009 import java.awt.print.PrinterJob; 010 011 import javax.swing.RepaintManager; 012 013 public class ComponentPrinter implements Printable { 014 private Component componentToBePrinted; 015 016 public static void printComponent(Component c) { 017 new ComponentPrinter(c).print(); 018 } 019 020 public ComponentPrinter(Component componentToBePrinted) { 021 this.componentToBePrinted = componentToBePrinted; 022 } 023 024 public void print() { 025 PrinterJob printJob = PrinterJob.getPrinterJob(); 026 printJob.setPrintable(this); 027 if (printJob.printDialog()) 028 try { 029 printJob.print(); 030 } catch (PrinterException pe) { 031 System.out.println("Error printing: " + pe); 032 } 033 } 034 035 public int print(Graphics g, PageFormat pageFormat, int pageIndex) { 036 if (pageIndex > 0) { 037 return (NO_SUCH_PAGE); 038 } 039 040 Graphics2D g2d = (Graphics2D) g; 041 g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); 042 disableDoubleBuffering(componentToBePrinted); 043 componentToBePrinted.paint(g2d); 044 enableDoubleBuffering(componentToBePrinted); 045 return (PAGE_EXISTS); 046 } 047 048 public static void disableDoubleBuffering(Component c) { 049 RepaintManager currentManager = RepaintManager.currentManager(c); 050 currentManager.setDoubleBufferingEnabled(false); 051 } 052 053 public static void enableDoubleBuffering(Component c) { 054 RepaintManager currentManager = RepaintManager.currentManager(c); 055 currentManager.setDoubleBufferingEnabled(true); 056 } 057 }