也许下面这段程序能帮助你!? 看看 INTERFACE Printable :public class JCPrintTable extends JCTable
    implements Printable {    public static final int MARGIN_IN_INCHES = 0;
    public static final int MARGIN_IN_PIXELS = 1;
    protected JCTable table;
    protected int page_width;
    protected int page_height;
    protected int page_resolution;
    protected int table_width;
    protected int table_height;
    protected Insets margin;
    protected int margin_unit;
    protected int current_page;
    public static final int ALL_PAGES = -1;
    protected int print_page;
    protected PageFormat page_format;
    protected JCListenerList printListeners;    public JCPrintTable(JCTable jctable) {
        page_width = 0;
        page_height = 0;
        page_resolution = 72;
        table_width = 0;
        table_height = 0;
        margin = new Insets(72, 72, 72, 72);
        margin_unit = 1;
        print_page = -1;
        printListeners = null;
        table = jctable;
        loadSettings(jctable);
    }    public void addPrintListener(JCPrintListener jcprintlistener) {
        printListeners = JCListenerList.add(printListeners, jcprintlistener);
    }    private void doPrintBody(Graphics g, int i) {
        if(printListeners != null) {
            Graphics g1 = g.create();
            g1.setColor(Color.black);
            g1.setFont(getFont());
            JCPrintEvent jcprintevent = new JCPrintEvent(this, g1, i + 1, getNumPages(), 2, this);
            fireJCPrintEvent(jcprintevent);
            g1.dispose();
        }
    }    private void doPrintPageFooter(Graphics g, int i) {
        Graphics g1 = g.create();
        g1.setColor(Color.black);
        g1.setFont(getFont());
        int j = margin_unit != 0 ? 1 : page_resolution;
        g1.setClip(j * margin.left, page_height - j * margin.bottom, table_width, j * margin.bottom);
        g1.translate(j * margin.left, page_height - j * margin.bottom);
        if(printListeners != null) {
            JCPrintEvent jcprintevent = new JCPrintEvent(this, g1, i + 1, getNumPages(), 3, this);
            fireJCPrintEvent(jcprintevent);
        } else {
            printPageFooter(g, i + 1);
        }
        g1.dispose();
    }    private void doPrintPageHeader(Graphics g, int i) {
        if(printListeners != null) {
            Graphics g1 = g.create();
            g1.setColor(Color.black);
            g1.setFont(getFont());
            int j = margin_unit != 0 ? 1 : page_resolution;
            g1.setClip(j * margin.left, 0, table_width, j * margin.top);
            g1.translate(j * margin.left, 0);
            JCPrintEvent jcprintevent = new JCPrintEvent(this, g1, i + 1, getNumPages(), 1, this);
            fireJCPrintEvent(jcprintevent);
            g1.dispose();
        }
    }    protected void fireJCPrintEvent(JCPrintEvent jcprintevent) {
        for(Enumeration enumeration = JCListenerList.elements(printListeners); enumeration.hasMoreElements();) {
            JCPrintListener jcprintlistener = (JCPrintListener)enumeration.nextElement();
            switch(jcprintevent.getType()) {
            case 1: // '\001'
                jcprintlistener.printPageHeader(jcprintevent);
                break;            case 2: // '\002'
                jcprintlistener.printPageBody(jcprintevent);
                break;            case 3: // '\003'
                jcprintlistener.printPageFooter(jcprintevent);
                break;
            }
        }    }    public Point getBounds(int i, int j) {
        Point point = new Point(0, 0);
        JCCellRange jccellrange = getPageCellRange(current_page);
        if(i == -1) {
            if(j < frozen_columns) {
                if(getRowLabelPlacement() == 2) {
                    if(getFrozenColumnPlacement() == 2)
                        point.x = getRowLabelWidth() + getRowLabelOffset() + 3 * getFrameBorderWidth();
                    else
                        point.x = getTableDimensions(current_page).width - getFrozenColumnWidth() - getFrameBorderWidth();
                } else
                if(getFrozenColumnPlacement() == 2)
                    point.x = getFrameBorderWidth();
                else
                    point.x = getTableDimensions(current_page).width - getRowLabelWidth() - getRowLabelOffset() - getFrozenColumnWidth() - 3 * getFrameBorderWidth();
                point.x += getColumnPosition(j) - getColumnPosition(0);
            } else {
                if(getRowLabelPlacement() == 2)
                    point.x = getRowLabelWidth() + getRowLabelOffset() + 3 * getFrameBorderWidth();
                else
                    point.x = getFrameBorderWidth();
                if(frozen_columns > 0 && getFrozenColumnPlacement() == 2)
                    point.x += getFrozenColumnWidth();
                point.x += getColumnPosition(j) - getColumnPosition(jccellrange.start_column);
            }
            if(getColumnLabelPlacement() == 1)
                point.y = getFrameBorderWidth();
            else
                point.y = getTableDimensions(current_page).height - getColumnLabelHeight() - getColumnLabelOffset() - 2 * getFrameBorderWidth();
        } else
        if(j == -1) {
            if(getRowLabelPlacement() == 2)
                point.x = getFrameBorderWidth();
            else
                point.x = getTableDimensions(current_page).width - getRowLabelWidth() - getRowLabelOffset() - 2 * getFrameBorderWidth();
            if(i < frozen_rows) {
                if(getColumnLabelPlacement() == 1) {
                    if(getFrozenRowPlacement() == 1)
                        point.y = getColumnLabelHeight() + getColumnLabelOffset() + 3 * getFrameBorderWidth();
                    else
                        point.y = getTableDimensions(current_page).height - getFrozenRowHeight() - getFrameBorderWidth();
                } else
                if(getFrozenRowPlacement() == 1)
                    point.y = getFrameBorderWidth();
                else
                    point.y = getTableDimensions(current_page).height - getColumnLabelHeight() - getColumnLabelOffset() - getFrozenRowHeight() - 3 * getFrameBorderWidth();
                point.y += getRowPosition(i) - getRowPosition(0);
            } else {
                if(getColumnLabelPlacement() == 1)
                    point.y = getColumnLabelHeight() + getColumnLabelOffset() + 3 * getFrameBorderWidth();
                else
                    point.y = getFrameBorderWidth();
                if(frozen_rows > 0 && getFrozenRowPlacement() == 1)
                    point.y += getFrozenRowHeight();
                point.y += getRowPosition(i) - getRowPosition(jccellrange.start_row);
            }
        } else {
            if(j < frozen_columns) {
                if(getRowLabelPlacement() == 2) {
                    if(getFrozenColumnPlacement() == 2)
                        point.x = getRowLabelWidth() + getRowLabelOffset() + 3 * getFrameBorderWidth();
                    else
                        point.x = getTableDimensions(current_page).width - getFrozenColumnWidth() - getFrameBorderWidth();
                } else
                if(getFrozenColumnPlacement() == 2)
                    point.x = getFrameBorderWidth();
                else
                    point.x = getTableDimensions(current_page).width - getRowLabelWidth() - getRowLabelOffset() - getFrozenColumnWidth() - 3 * getFrameBorderWidth();
                point.x += getColumnPosition(j) - getColumnPosition(0);
            } else {
                if(getRowLabelPlacement() == 2)
                    point.x = getRowLabelWidth() + getRowLabelOffset() + 3 * getFrameBorderWidth();
                else
                    point.x = getFrameBorderWidth();
                if(frozen_columns > 0 && getFrozenColumnPlacement() == 2)
                    point.x += getFrozenColumnWidth();
                point.x += getColumnPosition(j) - getColumnPosition(jccellrange.start_column);
            }
            if(i < frozen_rows) {
                if(getColumnLabelPlacement() == 1) {
                    if(getFrozenRowPlacement() == 1)
                        point.y = getColumnLabelHeight() + getColumnLabelOffset() + 3 * getFrameBorderWidth();
                    else
                        point.y = getTableDimensions(current_page).height - getFrozenRowHeight() - getFrameBorderWidth();
                } else
                if(getFrozenRowPlacement() == 1)
                    point.y = getFrameBorderWidth();
                else
                    point.y = getTableDimensions(current_page).height - getColumnLabelHeight() - getColumnLabelOffset() - getFrozenRowHeight() - 3 * getFrameBorderWidth();
                point.y += getRowPosition(i) - getRowPosition(0);
            } else {
                if(getColumnLabelPlacement() == 1)
                    point.y = getColumnLabelHeight() + getColumnLabelOffset() + 3 * getFrameBorderWidth();
                else
                    point.y = getFrameBorderWidth();
                if(frozen_rows > 0 && getFrozenRowPlacement() == 1)
                    point.y += getFrozenRowHeight();
                point.y += getRowPosition(i) - getRowPosition(jccellrange.start_row);
            }
        }
        Point point1 = getTableOffset();
        point.x += point1.x;
        point.y += point1.y;
        return point;
    }    private Rectangle getCellRangeBounds(JCCellRange jccellrange) {
        return getCellLayout().getBounds(jccellrange.start_row, jccellrange.start_column, jccellrange.end_row, jccellrange.end_column);
    }    private int getColumnLabelHeight() {
        if(column_label_display)
            return getCellLayout().getHeight(-1);
        else
            return 0;
    }    private int getColumnPosition(int i) {
        CellLayoutModel celllayoutmodel = getCellLayout();
        return celllayoutmodel.getColumnPosition(i);
    }    public Insets getDefaultPageMargins() {
        margin_unit = 1;
        margin = new Insets(72, 72, 72, 72);
        return margin;
    }    private int getFrozenColumnWidth() {
        CellLayoutModel celllayoutmodel = getCellLayout();
        int i = 0;
        for(int j = 0; j < getFrozenColumns(); j++)
            i += celllayoutmodel.getWidth(j);        return i;
    }    private int getFrozenRowHeight() {
        CellLayoutModel celllayoutmodel = getCellLayout();
        int i = 0;
        for(int j = 0; j < getFrozenRows(); j++)
            i += celllayoutmodel.getHeight(j);        return i;
    }    public int getMarginUnits() {
        return margin_unit;
    }    private int getNumColumnPages() throws JCPrintTable$IllegalSizeException {
        int j = 1;
        int k = getRowLabelWidth();
        int l = getFrozenColumnWidth();
        if(k + row_label_offset + l + 4 * frame_border_width > table_width)
            throw new JCPrintTable$IllegalSizeException(this, "The total width of row labels and frozen columns is larger than the page width.");
        CellLayoutModel celllayoutmodel = getCellLayout();
        int i = k + row_label_offset + l + 4 * frame_border_width;
        for(int i1 = frozen_columns; i1 < getNumColumns(); i1++) {
            i += celllayoutmodel.getWidth(i1);
            if(i > table_width) {
                i = k + row_label_offset + l + 4 * frame_border_width + celllayoutmodel.getWidth(i1);
                j++;
            }
        }        return j;
    }    public int getNumHorizontalPages() throws JCPrintTable$IllegalSizeException {
        return getNumColumnPages();
    }    public int getNumPages() throws JCPrintTable$IllegalSizeException {
        if(page_width * page_height == 0)
            return 0;
        else
            return getNumColumnPages() * getNumRowPages();
    }    private int getNumRowPages() throws JCPrintTable$IllegalSizeException {
        int j = 1;
        int k = getColumnLabelHeight();
        int l = getFrozenRowHeight();
        if(k + column_label_offset + l + 4 * frame_border_width > table_height)
            throw new JCPrintTable$IllegalSizeException(this, "The total height of column labels and frozen rows is larger than the page height.");
        CellLayoutModel celllayoutmodel = getCellLayout();
        int i = k + column_label_offset + l + 4 * frame_border_width;
        for(int i1 = getFrozenRows(); i1 < getNumRows(); i1++) {
            i += celllayoutmodel.getHeight(i1);
            if(i > table_height) {
                i = k + column_label_offset + l + 4 * frame_border_width + celllayoutmodel.getHeight(i1);
                j++;
            }
        }        return j;
    }    public int getNumVerticalPages() {
        return getNumRowPages();
    }    public JCCellRange getPageCellRange(int i) throws JCPrintTable$IllegalSizeException {
        if(getNumPages() == 0) {
            return null;
        } else {
            JCCellPosition jccellposition = getPageStartCell(i);
            JCCellPosition jccellposition1 = getPageEndCell(i);
            return new JCCellRange(jccellposition.row, jccellposition.column, jccellposition1.row, jccellposition1.column);
        }
    }    public Dimension getPageDimensions() {
        return new Dimension(page_width, page_height);
    }    private JCCellPosition getPageEndCell(int i) throws JCPrintTable$IllegalSizeException {
        int l = getNumColumnPages();
        int i1 = getNumRowPages();
        int j1 = i / l + 1;
        int k1 = i % l + 1;
        CellLayoutModel celllayoutmodel = getCellLayout();
        int l1 = frozen_columns;
        if(k1 == l) {
            l1 = getNumColumns() - 1;
        } else {
            int i2 = frozen_columns;
            if(k1 > 1)
                i2 = getPageEndCell(i - 1).column + 1;
            int k2 = table_width - getRowLabelWidth() - getRowLabelOffset() - getFrozenColumnWidth() - 4 * getFrameBorderWidth();
            int j = 0;
            for(int i3 = i2; i3 < getNumColumns(); i3++) {
                j += celllayoutmodel.getWidth(i3);
                if(j <= k2)
                    l1 = i3;
            }        }
        int j2 = frozen_rows;
        if(j1 == i1) {
            j2 = getNumRows() - 1;
        } else {
            int l2 = frozen_rows;
            if(j1 > 1 && k1 == 1)
                l2 = getPageEndCell(i - 1).row + 1;
            else
            if(j1 > 1 && k1 != 1)
                l2 = getPageEndCell(l * (j1 - 1) - 1).row + 1;
            int j3 = table_height - getColumnLabelHeight() - getColumnLabelOffset() - getFrozenRowHeight() - 4 * getFrameBorderWidth();
            int k = 0;
            for(int k3 = l2; k3 < getNumRows(); k3++) {
                k += celllayoutmodel.getHeight(k3);
                if(k <= j3)
                    j2 = k3;
            }        }
        return new JCCellPosition(j2, l1);
    }    public int getPageHeight() {
        return page_height;
    }    public Insets getPageMargins() {
        return margin;
    }    public int getPageResolution() {
        return page_resolution;
    }    private JCCellPosition getPageStartCell(int i) throws JCPrintTable$IllegalSizeException {
        int j = getNumColumnPages();
        int k = getNumRowPages();
        int l = i / j + 1;
        int i1 = i % j + 1;
        int j1 = frozen_columns;
        if(i1 == 1)
            j1 = frozen_columns;
        else
            j1 = getPageEndCell(i - 1).column + 1;
        int k1 = frozen_rows;
        if(l == 1)
            k1 = frozen_rows;
        else
        if(i1 == 1)
            k1 = getPageEndCell(i - 1).row + 1;
        else
            k1 = getPageEndCell(j * (l - 1) - 1).row + 1;
        return new JCCellPosition(k1, j1);
    }    public int getPageWidth() {
        return page_width;
    }    private int getRowLabelWidth() {
        if(row_label_display)
            return getCellLayout().getWidth(-1);
        else
            return 0;
    }    private int getRowPosition(int i) {
        CellLayoutModel celllayoutmodel = getCellLayout();
        return celllayoutmodel.getRowPosition(i);
    }    public Dimension getTableDimensions(int i) {
        return getTablePageDimension(getPageCellRange(i));
    }    private Point getTableOffset() {
        int i = 1;
        if(margin_unit == 0)
            i = page_resolution;
        return new Point(i * margin.left, i * margin.top);
    }    private Dimension getTablePageDimension(JCCellRange jccellrange) {
        Rectangle rectangle = getCellRangeBounds(jccellrange);
        return new Dimension(getRowLabelWidth() + getRowLabelOffset() + 4 * getFrameBorderWidth() + getFrozenColumnWidth() + rectangle.width, getColumnLabelHeight() + getColumnLabelOffset() + 4 * getFrameBorderWidth() + getFrozenRowHeight() + rectangle.height);
    }    protected void loadSettings(JCTable jctable) {
        columnWidths = jctable.columnWidths;
        cellStyles = jctable.cellStyles;
        rowHeights = jctable.rowHeights;
        if(cellRendererPane != null && cellRendererPane.getParent() == this)
            remove(cellRendererPane);
        cellRendererPane = jctable.cellRendererPane;
        cellAreaHandler = new PrintCellAreaHandler(this);
        cellAreaHandler.cellAreaRenderer = new PrintCellAreaRenderer(cellAreaHandler);
        cellAreaHandler.cellAreaRenderer.borderColor = jctable.cellAreaHandler.cellAreaRenderer.borderColor;
        cellAreaHandler.cellAreaRenderer.borderHighlightColor = jctable.cellAreaHandler.cellAreaRenderer.borderHighlightColor;
        cellAreaHandler.cellAreaRenderer.borderShadowColor = jctable.cellAreaHandler.cellAreaRenderer.borderShadowColor;
        cellAreaHandler.cellArea = jctable.cellAreaHandler.cellArea;
        cellAreaHandler.frozenRowArea = jctable.cellAreaHandler.frozenRowArea;
        cellAreaHandler.columnLabelArea = jctable.cellAreaHandler.columnLabelArea;
        cellAreaHandler.frozenColumnArea = jctable.cellAreaHandler.frozenColumnArea;
        cellAreaHandler.frozenCellArea = jctable.cellAreaHandler.frozenCellArea;
        cellAreaHandler.frozenColumnLabelArea = jctable.cellAreaHandler.frozenColumnLabelArea;
        cellAreaHandler.rowLabelArea = jctable.cellAreaHandler.rowLabelArea;
        cellAreaHandler.frozenRowLabelArea = jctable.cellAreaHandler.frozenRowLabelArea;
        cellAreaHandler.areas = jctable.cellAreaHandler.areas;
        cellAreaHandler.cellInfo = jctable.cellAreaHandler.cellInfo;
        cellAreaHandler.cellOrigin = jctable.cellAreaHandler.cellOrigin;
        dataView = jctable.dataView;
        int i = getNumRows();
        int j = getNumColumns();
        column_label_offset = jctable.column_label_offset;
        row_label_offset = jctable.row_label_offset;
        cellLayout = new PrintCellLayout(i, j);
        cellLayout.setTable(this);
        for(int k = -1; k < i; k++)
            cellLayout.setHeight(k, jctable.cellLayout.getHeight(k));        for(int l = -1; l < j; l++)
            cellLayout.setWidth(l, jctable.cellLayout.getWidth(l));        tableLayout = new TableLayout(cellAreaHandler);
        hsb_display = 2;
        vsb_display = 2;
        component_border_width = jctable.component_border_width;
        componentHandler = jctable.componentHandler;
        cell_border_width = jctable.cell_border_width;
        column_label_display = jctable.column_label_display;
        column_label_placement = jctable.column_label_placement;
        focus_color = jctable.focus_color;
        focus_indicator = jctable.focus_indicator;
        frame_border = jctable.frame_border;
        frame_border_width = jctable.frame_border_width;
        frozen_columns = jctable.frozen_columns;
        frozen_column_placement = jctable.frozen_column_placement;
        frozen_rows = jctable.frozen_rows;
        frozen_row_placement = jctable.frozen_row_placement;
        margin_height = jctable.margin_height;
        margin_width = jctable.margin_width;
        row_label_display = jctable.row_label_display;
        row_label_placement = jctable.row_label_placement;
        selected_background = jctable.selected_background;
        selected_foreground = jctable.selected_foreground;
    }    public void print() {
        PrinterJob printerjob = PrinterJob.getPrinterJob();
        if(printerjob != null)
            try {
                printerjob.setPrintable(this);
                setPageFormat(printerjob.defaultPage());
                setPageDimensions((int)printerjob.defaultPage().getWidth(), (int)printerjob.defaultPage().getHeight());
                setPrintPage(-1);
                printerjob.print();
            }
            catch(PrinterException printerexception) {
                System.out.println(printerexception.getMessage());
            }
    }    public int print(Graphics g, PageFormat pageformat, int i) {
        if(i >= getNumPages() || print_page != -1 && i > 0)
            return 1;
        if(print_page == -1)
            printPage(g, i);
        else
            printPage(g, print_page);
        return 0;
    }    public void printPage(Graphics g, int i) {
        current_page = i;
        JCCellRange jccellrange;
        try {
            jccellrange = getPageCellRange(i);
        }
        catch(JCPrintTable$IllegalSizeException jcprinttable$illegalsizeexception) {
            System.out.println(jcprinttable$illegalsizeexception.getMessage());
            return;
        }
        if(jccellrange == null) {
            return;
        } else {
            Dimension dimension = getTablePageDimension(jccellrange);
            printPage(g, jccellrange);
            return;
        }
    }    public void printPage(Graphics g, JCCellRange jccellrange) {
        ((PrintCellAreaHandler)cellAreaHandler).page_range = jccellrange;
        CellLayoutModel celllayoutmodel = table.getCellLayout();
        Dimension dimension = new Dimension(0, 0);
        dimension.width = ((celllayoutmodel.getWidth(-1) + getRowLabelOffset() + getFrozenColumnWidth() + getColumnPosition(jccellrange.end_column)) - getColumnPosition(jccellrange.start_column)) + celllayoutmodel.getWidth(jccellrange.end_column);
        dimension.height = ((celllayoutmodel.getHeight(-1) + getColumnLabelOffset() + getFrozenRowHeight() + getRowPosition(jccellrange.end_row)) - getRowPosition(jccellrange.start_row)) + celllayoutmodel.getHeight(jccellrange.end_row);
        g.setColor(Color.white);
        g.fillRect(0, 0, page_width, page_height);
        Point point = getTableOffset();
        g.setClip(point.x, point.y, table_width, table_height);
        if(table.spanHandler != null) {
            spanHandler = new SpanHandler();
            spanHandler.setTable(this);
            Collection collection = table.getSpannedRanges();
            try {
                if(collection != null) {
                    JCCellRange jccellrange1;
                    for(Iterator iterator = collection.iterator(); iterator.hasNext(); spanHandler.addSpannedRange(new JCCellRange(jccellrange1.start_row, jccellrange1.start_column, jccellrange1.end_row, jccellrange1.end_column)))
                        jccellrange1 = (JCCellRange)iterator.next();                }
            }
            catch(Exception e) { }
            splitSpans(jccellrange);
        }
        int i = getFrozenColumns();
        if(i > 0) {
            for(int j = 0; j < i; j++)
                cellAreaHandler.cellAreaRenderer.paintCell(g, -1, j);        }
        for(int k = jccellrange.start_column; k <= jccellrange.end_column; k++)
            cellAreaHandler.cellAreaRenderer.paintCell(g, -1, k);        int l = getFrozenRows();
        if(l > 0) {
            for(int i1 = 0; i1 < l; i1++)
                cellAreaHandler.cellAreaRenderer.paintCell(g, i1, -1);        }
        for(int j1 = jccellrange.start_row; j1 <= jccellrange.end_row; j1++)
            cellAreaHandler.cellAreaRenderer.paintCell(g, j1, -1);        if(i > 0 && l > 0) {
            for(int k1 = 0; k1 < l; k1++) {
                for(int k2 = 0; k2 < i; k2++)
                    cellAreaHandler.cellAreaRenderer.paintCell(g, k1, k2);            }        }
        if(i > 0) {
            for(int l1 = jccellrange.start_row; l1 <= jccellrange.end_row; l1++) {
                for(int l2 = 0; l2 < i; l2++)
                    cellAreaHandler.cellAreaRenderer.paintCell(g, l1, l2);            }        }
        if(l > 0) {
            for(int i2 = 0; i2 < l; i2++) {
                for(int i3 = jccellrange.start_column; i3 <= jccellrange.end_column; i3++)
                    cellAreaHandler.cellAreaRenderer.paintCell(g, i2, i3);            }        }
        for(int j2 = jccellrange.start_row; j2 <= jccellrange.end_row; j2++) {
            for(int j3 = jccellrange.start_column; j3 <= jccellrange.end_column; j3++)
                cellAreaHandler.cellAreaRenderer.paintCell(g, j2, j3);        }        if(getFrameBorderWidth() > 0) {
            Rectangle rectangle = new Rectangle(cellAreaHandler.getBounds(jccellrange.start_row, -1).x, cellAreaHandler.getBounds(jccellrange.start_row, -1).y, cellAreaHandler.getBounds(jccellrange.start_row, -1).width, (cellAreaHandler.getBounds(jccellrange.end_row, -1).y + cellAreaHandler.getBounds(jccellrange.end_row, -1).height) - cellAreaHandler.getBounds(jccellrange.start_row, -1).y);
            if(l > 0) {
                Rectangle rectangle1 = new Rectangle(cellAreaHandler.getBounds(0, -1).x, cellAreaHandler.getBounds(0, -1).y, cellAreaHandler.getBounds(0, -1).width, (cellAreaHandler.getBounds(l - 1, -1).y + cellAreaHandler.getBounds(l - 1, -1).height) - cellAreaHandler.getBounds(0, -1).y);
                rectangle = new Rectangle(Math.min(rectangle.x, rectangle1.x), Math.min(rectangle.y, rectangle1.y), Math.max(rectangle.width, rectangle1.width), rectangle.height + rectangle1.height);
            }
            Rectangle rectangle2 = new Rectangle(cellAreaHandler.getBounds(-1, jccellrange.start_column).x, cellAreaHandler.getBounds(-1, jccellrange.start_column).y, (cellAreaHandler.getBounds(-1, jccellrange.end_column).x + cellAreaHandler.getBounds(-1, jccellrange.end_column).width) - cellAreaHandler.getBounds(-1, jccellrange.start_column).x, cellAreaHandler.getBounds(-1, jccellrange.start_column).height);
            if(i > 0) {
                Rectangle rectangle3 = new Rectangle(cellAreaHandler.getBounds(-1, 0).x, cellAreaHandler.getBounds(-1, 0).y, (cellAreaHandler.getBounds(-1, i - 1).x + cellAreaHandler.getBounds(-1, i - 1).width) - cellAreaHandler.getBounds(-1, 0).x, cellAreaHandler.getBounds(-1, 0).height);
                rectangle2 = new Rectangle(Math.min(rectangle2.x, rectangle3.x), Math.min(rectangle2.y, rectangle3.y), rectangle2.width + rectangle3.width, Math.max(rectangle2.height, rectangle3.height));
            }
            Rectangle rectangle4 = new Rectangle(rectangle2.x, rectangle.y, rectangle2.width, rectangle.height);
            CellBorderModel cellbordermodel = table.getFrameBorder();
            Color color = table.getBackground();
            cellbordermodel.drawBackground(g, frame_border_width, 15, rectangle.x - frame_border_width, rectangle.y - frame_border_width, rectangle.width + 2 * frame_border_width, rectangle.height + 2 * frame_border_width, color.brighter(), color.darker(), color);
            cellbordermodel.drawBackground(g, frame_border_width, 15, rectangle2.x - frame_border_width, rectangle2.y - frame_border_width, rectangle2.width + 2 * frame_border_width, rectangle2.height + 2 * frame_border_width, color.brighter(), color.darker(), color);
            cellbordermodel.drawBackground(g, frame_border_width, 15, rectangle4.x - frame_border_width, rectangle4.y - frame_border_width, rectangle4.width + 2 * frame_border_width, rectangle4.height + 2 * frame_border_width, color.brighter(), color.darker(), color);
        }
        doPrintPageHeader(g, current_page);
        doPrintBody(g, current_page);
        doPrintPageFooter(g, current_page);
        ((PrintCellAreaHandler)cellAreaHandler).page_range = null;
    }    private void printPageFooter(Graphics g, int i) {
        Graphics g1 = g.create();
        int j = margin_unit != 0 ? 1 : page_resolution;
        g1.setClip(j * margin.left, page_height - j * margin.bottom, table_width, j * margin.bottom);
        g1.translate(j * margin.left, page_height - j * margin.bottom);
        Rectangle rectangle = g1.getClipBounds();
        g1.setColor(Color.black);
        g1.setFont(getFont());
        String s = LocaleBundle.string("Page ") + i + LocaleBundle.string(" of ") + getNumPages();
        g1.drawString(s, 0, rectangle.height / 2);
    }    public void removePrintListener(JCPrintListener jcprintlistener) {
        printListeners = JCListenerList.remove(printListeners, jcprintlistener);
    }    private void setInternalDimensions() {
        if(page_width == 0 || page_height == 0)
            return;
        int i = margin_unit != 0 ? 1 : page_resolution;
        table_width = page_width - i * (margin.left + margin.right);
        table_height = page_height - i * (margin.top + margin.bottom);
        CellLayoutModel celllayoutmodel = getCellLayout();
        int j = table_width - getRowLabelWidth() - getRowLabelOffset() - getFrozenColumnWidth() - 4 * getFrameBorderWidth();
        for(int k = getFrozenColumns(); k < getNumColumns(); k++)
            if(celllayoutmodel.getWidth(k) > j)
                celllayoutmodel.setWidth(k, j);        int l = table_height - getColumnLabelHeight() - getColumnLabelOffset() - getFrozenRowHeight() - 4 * getFrameBorderWidth();
        for(int i1 = getFrozenRows(); i1 < getNumRows(); i1++)
            if(celllayoutmodel.getHeight(i1) > l)
                celllayoutmodel.setHeight(i1, l);    }    public void setMarginUnits(int i) {
        if(i == 0)
            margin_unit = 0;
        else
            margin_unit = 1;
    }    public void setPageDimensions(int i, int j) {
        if(i == 0 || j == 0) {
            i = 612;
            j = 792;
            page_resolution = 72;
        }
        page_width = i;
        page_height = j;
        setInternalDimensions();
    }    public void setPageFormat(PageFormat pageformat) {
        page_format = pageformat;
    }    public void setPageHeight(int i) {
        page_height = i;
        setInternalDimensions();
    }    public void setPageMargins(Insets insets) {
        if(insets == null)
            insets = getDefaultPageMargins();
        else
            margin = insets;
        setInternalDimensions();
    }    public void setPageResolution(int i) {
        page_resolution = i;
        setInternalDimensions();
    }    public void setPageWidth(int i) {
        page_width = i;
        setInternalDimensions();
    }    public void setPrintPage(int i) {
        print_page = i;
    }    public void showPrintPreview(String s) {
        JCPrintPreview jcprintpreview = new JCPrintPreview(s, this);
        jcprintpreview.showPage(0);
    }    private void splitSpans(JCCellRange jccellrange) {
        if(spanHandler != null) {
            Vector vector = new Vector();
            Collection collection = spanHandler.getSpannedRanges();
            if(collection != null) {
                JCCellRange jccellrange2;
                for(Iterator iterator = collection.iterator(); iterator.hasNext(); vector.addElement(jccellrange2)) {
                    JCCellRange jccellrange1 = (JCCellRange)iterator.next();
                    jccellrange2 = new JCCellRange(jccellrange1.start_row, jccellrange1.start_column, jccellrange1.end_row, jccellrange1.end_column);
                    if(jccellrange1.start_row < jccellrange.start_row && jccellrange1.end_row >= jccellrange.end_row)
                        jccellrange2.reshape(jccellrange2.start_row, jccellrange2.start_column, jccellrange.start_row - 1, jccellrange2.end_column);
                    if(jccellrange1.start_row <= jccellrange.end_row && jccellrange1.end_row > jccellrange.end_row)
                        jccellrange2.reshape(jccellrange2.start_row, jccellrange2.start_column, jccellrange.end_row, jccellrange2.end_column);
                    if(jccellrange1.start_column < jccellrange.start_column && jccellrange1.end_column >= jccellrange.start_column)
                        jccellrange2.reshape(jccellrange2.start_row, jccellrange.start_column, jccellrange2.end_row, jccellrange2.end_column);
                    if(jccellrange1.start_column <= jccellrange.end_column && jccellrange1.end_column > jccellrange.end_column)
                        jccellrange2.reshape(jccellrange2.start_row, jccellrange2.start_column, jccellrange2.end_row, jccellrange.end_column);
                }            }
            try {
                spanHandler.setSpannedRanges(vector);
            }
            catch(Exception e) { }
        }
    }
}