/** * Starts the print operation. This is quite expensive, and is kicked off in a separate thread. */ public void print() { final PrinterJob job = PrinterJob.getPrinterJob(); job.setPrintable(this); // make a local copy of the object to be printed, for use by the print thread // below... final Component printMe = getPrintComponent(); Thread worker = new Thread() { public void run() { if (job.printDialog()) { try { // need to make sure that no other thread tries to // run a print job and set printCompnent at the same // time... synchronized (this) { printComponent = printMe; job.print(); printComponent = null; } } catch (Exception ex) { log.warning("error printing: " + ex); } } } }; worker.start(); }
/** print the canvas scaled with factor <code>scale</code> */ public void print(double scale) { printScale = scale; PrinterJob printJob = PrinterJob.getPrinterJob(); printJob.setPrintable(this); if (printJob.printDialog()) { try { printJob.print(); } catch (Exception ex) { ex.printStackTrace(); } } }