--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTableUI.java Thu Dec 22 12:17:56 2016 +0300
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTableUI.java Thu Dec 22 18:30:27 2016 +0530
@@ -1812,12 +1812,12 @@
}
boolean ltr = table.getComponentOrientation().isLeftToRight();
-
+ Point upperLeft, lowerRight;
// compute the visible part of table which needs to be painted
Rectangle visibleBounds = clip.intersection(bounds);
- Point upperLeft = visibleBounds.getLocation();
- Point lowerRight = new Point(visibleBounds.x + visibleBounds.width - 1,
- visibleBounds.y + visibleBounds.height - 1);
+ upperLeft = visibleBounds.getLocation();
+ lowerRight = new Point(visibleBounds.x + visibleBounds.width - 1,
+ visibleBounds.y + visibleBounds.height - 1);
int rMin = table.rowAtPoint(upperLeft);
int rMax = table.rowAtPoint(lowerRight);
@@ -1834,6 +1834,18 @@
rMax = table.getRowCount()-1;
}
+ // For FIT_WIDTH, all columns should be printed irrespective of
+ // how many columns are visible. So, we used clip which is already set to
+ // total col width instead of visible region
+ // Since JTable.PrintMode is not accessible
+ // from here, we aet "Table.printMode" in TablePrintable#print and
+ // access from here.
+ Object printMode = table.getClientProperty("Table.printMode");
+ if ((printMode == JTable.PrintMode.FIT_WIDTH)) {
+ upperLeft = clip.getLocation();
+ lowerRight = new Point(clip.x + clip.width - 1,
+ clip.y + clip.height - 1);
+ }
int cMin = table.columnAtPoint(ltr ? upperLeft : lowerRight);
int cMax = table.columnAtPoint(ltr ? lowerRight : upperLeft);
// This should never happen.