--- old/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTableUI.java 2015-10-14 16:48:32.383964500 +0530 +++ new/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTableUI.java 2015-10-14 16:48:31.740882900 +0530 @@ -1812,9 +1812,11 @@ boolean ltr = table.getComponentOrientation().isLeftToRight(); - Point upperLeft = clip.getLocation(); - Point lowerRight = new Point(clip.x + clip.width - 1, - clip.y + clip.height - 1); + // 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); int rMin = table.rowAtPoint(upperLeft); int rMax = table.rowAtPoint(lowerRight); @@ -1843,6 +1845,21 @@ cMax = table.getColumnCount()-1; } + Container comp = SwingUtilities.getUnwrappedParent(table); + if (comp != null) { + comp = comp.getParent(); + } + + if (comp != null && !(comp instanceof JViewport) && !(comp instanceof JScrollPane)) { + // We did rMax-1 to paint the same number of rows that are drawn on console + // otherwise 1 extra row is printed per page than that are displayed + // when there is no scrollPane and we do printing of table + // but not when rmax is already pointing to index of last row + if (rMax != (table.getRowCount() - 1)) { + rMax = rMax - 1; + } + } + // Paint the grid. paintGrid(g, rMin, rMax, cMin, cMax);