Buongiorno, a suo tempo avevo ravanato un po' in giro per la rete fino a trovare un esempio (non ricordo dove), comunque ti posto la classe che ho ricavato:
codice:
import javax.swing.*;
import javax.swing.table.*;

import java.awt.print.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.Dimension;

public class StampaTabella implements Printable {

  JFrame frame;
  JTable tableView;

  public StampaTabella(JTable Tabella) {
  	tableView = Tabella;
  }

	public void Stampa() {
	  PrinterJob pj=PrinterJob.getPrinterJob();
		pj.setPrintable(StampaTabella.this);
		pj.printDialog();
		try{
		    pj.print();
		}
		catch (Exception ex) {
			ex.printStackTrace();
		}
	}

  public int print(Graphics g, PageFormat pageFormat, int pageIndex) throws PrinterException {
	  Graphics2D  g2 = (Graphics2D) g;
		g2.setColor(Color.black);
		int fontHeight = g2.getFontMetrics().getHeight();
		int fontDesent = g2.getFontMetrics().getDescent();
		//leave room for page number
		double pageHeight = pageFormat.getImageableHeight()-fontHeight;
		double pageWidth = pageFormat.getImageableWidth();
		double tableWidth = (double)tableView.getColumnModel().getTotalColumnWidth();
		double scale = 1;
		if (tableWidth >= pageWidth) {
			scale =  pageWidth / tableWidth;
		}
		double headerHeightOnPage = tableView.getTableHeader().getHeight() * scale;
		double tableWidthOnPage = tableWidth * scale;
		double oneRowHeight = (tableView.getRowHeight() + tableView.getRowMargin()) * scale;
		int numRowsOnAPage = (int)((pageHeight - headerHeightOnPage) / oneRowHeight);
		double pageHeightForTable = oneRowHeight * numRowsOnAPage;
		int totalNumPages= (int)Math.ceil(((double)tableView.getRowCount()) / numRowsOnAPage);
		if(pageIndex>=totalNumPages) {
			return NO_SUCH_PAGE;
		}
		g2.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
		g2.drawString("Page: "+(pageIndex+1),(int)pageWidth/2-35,
		    (int)(pageHeight+fontHeight-fontDesent));//bottom center

		g2.translate(0f,headerHeightOnPage);
		g2.translate(0f,-pageIndex*pageHeightForTable);
		//TODO this next line treats the last page as a full page
		g2.setClip(0, (int)(pageHeightForTable*pageIndex),(int)
		    Math.ceil(tableWidthOnPage),
		    (int) Math.ceil(pageHeightForTable));

		g2.scale(scale,scale);
		tableView.paint(g2);
		g2.scale(1/scale,1/scale);
		g2.translate(0f,pageIndex*pageHeightForTable);
		g2.translate(0f, -headerHeightOnPage);
		g2.setClip(0, 0,(int) Math.ceil(tableWidthOnPage),
			(int)Math.ceil(headerHeightOnPage));
		g2.scale(scale,scale);
		tableView.getTableHeader().paint(g2);//paint header at top
		return Printable.PAGE_EXISTS;
	}

}
Fatto questo per stampare una jtable scrivo questo:
codice:
StampaTabella prn = new StampaTabella(stat); // stat è la jtable da stampare
prn.Stampa();
prn = null;
Ci mette un po' comunque più o meno funziona.
Ciao