Prueba con la clase Print
en tu clase implementa Printable
debes crear un metodo como el siguiente:
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
if (pageIndex > 0) { /* We have only one page, and 'page' is zero-based */
return NO_SUCH_PAGE;
}
Graphics2D g2d = (Graphics2D)graphics;
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
hojaH.printAll(graphics);
return PAGE_EXISTS;
}
y luego lo puedes llamar de la siguiente manera:
private void imprimirHoja(){
try {
PrinterJob job = PrinterJob.getPrinterJob();
PageFormat pageFormat = new PageFormat();
java.awt.print.Paper papel = new java.awt.print.Paper();
papel.setImageableArea(0, 0, 99999, 99999);
pageFormat.setPaper(papel);
pageFormat=job.pageDialog(pageFormat);
pageFormat.setOrientation(pageFormat.LANDSCAPE);
job.setPrintable(this, pageFormat);
job.setPrintable(this);
if(job.printDialog()){
job.print();
}
} catch (Exception ex) {
System.err.println("NO SE PUDO IMPRIMIR");
}
}
Esto te imprimira una area del JFrame que estas utilizando, no recuerdo bien pero creo que con el setImageableArea modificas el area que deseas imprimir.
Yo te invito que veas bien el funcionamiento de Printable (http://download.oracle.com/javase/1.4.2/docs/api/java/awt/print/Printable.html) y de PrinterJob (http://download.oracle.com/javase/1.4.2/docs/api/java/awt/print/PrinterJob.html) creo que tambien sera util ver el PageFormat para ver los formatos de la pagina: http://download.oracle.com/javase/1.4.2/docs/api/java/awt/print/PageFormat.html
espero que te sea util