May 31st, 2000, 05:43 PM
hi i'm using the following code to attempt to print the contents of a frame
class PrintUtilities implements Printable { private Component componentToBePrinted;
public static void printComponent(Component c) { new PrintUtilities(c).print(); }
public PrintUtilities(Component componentToBePrinted) { this.componentToBePrinted =
componentToBePrinted; }
public void print() { PrinterJob printJob = PrinterJob.getPrinterJob(); printJob.setPrintable(this); if
(printJob.printDialog()) try { printJob.print(); } catch(PrinterException pe) {
System.out.println("Error printing: " + pe); } }
public int print(Graphics g, PageFormat pageFormat, int pageIndex) { if (pageIndex > 0) {
return(NO_SUCH_PAGE); } else { Graphics2D g2d = (Graphics2D)g;
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
disableDoubleBuffering(componentToBePrinted); componentToBePrinted.paint(g2d);
enableDoubleBuffering(componentToBePrinted); return(PAGE_EXISTS); } }
/** The speed and quality of printing suffers dramatically if * any of the containers have double
buffering turned on. * So this turns if off globally. * @see enableDoubleBuffering */ public static void
disableDoubleBuffering(Component c) { RepaintManager currentManager =
RepaintManager.currentManager(c); currentManager.setDoubleBufferingEnabled(false); }
/** Re-enables double buffering globally. */
public static void enableDoubleBuffering(Component c) { RepaintManager currentManager =
RepaintManager.currentManager(c); currentManager.setDoubleBufferingEnabled(true); } }
then when i call it using a button
PrintUtilities.printComponent(window); // window is the name of the frame // I want to print
it doesn't do anything when i push the button
anybody know why
in the java console i get the following method after pressing the print button
java.lang.ClassFormatError: Class already loaded
at java.lang.ClassLoader.defineClass(Compiled Code)
at netscape.applet.AppletClassLoader.loadClass(Compiled Code)
at netscape.applet.AppletClassLoader.findClass(Compiled Code)
at netscape.applet.AppletClassLoader.loadClass1(Compiled Code)
at netscape.applet.AppletClassLoader.loadClass(Compiled Code)
at java.lang.ClassLoader.loadClassInternal(Compiled Code)
at BusCard3.action(Compiled Code)
at java.awt.Component.handleEvent(Compiled Code)
at java.awt.Component.postEvent(Compiled Code)
at java.awt.Component.postEvent(Compiled Code)
at java.awt.Component.dispatchEventImpl(Compiled Code)
* at java.awt.Component.dispatchEvent(Compiled Code)
at java.awt.EventDispatchThread$EventPump.dispatchEvents(Compiled Code)
at java.awt.EventDispatchThread.run(Compiled Code)
at netscape.applet.DerivedAppletFrame$AppletEventDispatchThread.run(Compiled Code)
class PrintUtilities implements Printable { private Component componentToBePrinted;
public static void printComponent(Component c) { new PrintUtilities(c).print(); }
public PrintUtilities(Component componentToBePrinted) { this.componentToBePrinted =
componentToBePrinted; }
public void print() { PrinterJob printJob = PrinterJob.getPrinterJob(); printJob.setPrintable(this); if
(printJob.printDialog()) try { printJob.print(); } catch(PrinterException pe) {
System.out.println("Error printing: " + pe); } }
public int print(Graphics g, PageFormat pageFormat, int pageIndex) { if (pageIndex > 0) {
return(NO_SUCH_PAGE); } else { Graphics2D g2d = (Graphics2D)g;
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
disableDoubleBuffering(componentToBePrinted); componentToBePrinted.paint(g2d);
enableDoubleBuffering(componentToBePrinted); return(PAGE_EXISTS); } }
/** The speed and quality of printing suffers dramatically if * any of the containers have double
buffering turned on. * So this turns if off globally. * @see enableDoubleBuffering */ public static void
disableDoubleBuffering(Component c) { RepaintManager currentManager =
RepaintManager.currentManager(c); currentManager.setDoubleBufferingEnabled(false); }
/** Re-enables double buffering globally. */
public static void enableDoubleBuffering(Component c) { RepaintManager currentManager =
RepaintManager.currentManager(c); currentManager.setDoubleBufferingEnabled(true); } }
then when i call it using a button
PrintUtilities.printComponent(window); // window is the name of the frame // I want to print
it doesn't do anything when i push the button
anybody know why
in the java console i get the following method after pressing the print button
java.lang.ClassFormatError: Class already loaded
at java.lang.ClassLoader.defineClass(Compiled Code)
at netscape.applet.AppletClassLoader.loadClass(Compiled Code)
at netscape.applet.AppletClassLoader.findClass(Compiled Code)
at netscape.applet.AppletClassLoader.loadClass1(Compiled Code)
at netscape.applet.AppletClassLoader.loadClass(Compiled Code)
at java.lang.ClassLoader.loadClassInternal(Compiled Code)
at BusCard3.action(Compiled Code)
at java.awt.Component.handleEvent(Compiled Code)
at java.awt.Component.postEvent(Compiled Code)
at java.awt.Component.postEvent(Compiled Code)
at java.awt.Component.dispatchEventImpl(Compiled Code)
* at java.awt.Component.dispatchEvent(Compiled Code)
at java.awt.EventDispatchThread$EventPump.dispatchEvents(Compiled Code)
at java.awt.EventDispatchThread.run(Compiled Code)
at netscape.applet.DerivedAppletFrame$AppletEventDispatchThread.run(Compiled Code)