也许下面这段程序能帮助你!? 看看 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) { }
}
}
}
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) { }
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货