This patch corrects the calculation of the cell width for VERTICAL layoutOrientation in JLists and greatly improves performance of JList painting by saving most updateLayoutState() calls from within paint().
2006-01-28 Roman Kennke <[EMAIL PROTECTED]> * javax/swing/plaf/basic/BasicListUI.java (getCellBounds): Determine correct list width when having a layoutOrientation of VERTICAL. (maybeUpdateLayoutState): Don't consider the validation state of the list. /Roman
Index: javax/swing/plaf/basic/BasicListUI.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicListUI.java,v retrieving revision 1.50 diff -u -r1.50 BasicListUI.java --- javax/swing/plaf/basic/BasicListUI.java 10 Jan 2006 13:13:48 -0000 1.50 +++ javax/swing/plaf/basic/BasicListUI.java 28 Jan 2006 20:23:24 -0000 @@ -720,12 +720,19 @@ int minIndex = Math.min(index1, index2); int maxIndex = Math.max(index1, index2); Point loc = indexToLocation(list, minIndex); - Rectangle bounds = new Rectangle(loc.x, loc.y, cellWidth, + + // When the layoutOrientation is VERTICAL, then the width == the list + // width. Otherwise the cellWidth field is used. + int width = cellWidth; + if (l.getLayoutOrientation() == JList.VERTICAL) + width = l.getWidth(); + + Rectangle bounds = new Rectangle(loc.x, loc.y, width, getCellHeight(minIndex)); for (int i = minIndex + 1; i <= maxIndex; i++) { Point hiLoc = indexToLocation(list, i); - Rectangle hibounds = new Rectangle(hiLoc.x, hiLoc.y, cellWidth, + Rectangle hibounds = new Rectangle(hiLoc.x, hiLoc.y, width, getCellHeight(i)); bounds = bounds.union(hibounds); } @@ -894,7 +901,7 @@ */ protected void maybeUpdateLayoutState() { - if (updateLayoutStateNeeded != 0 || !list.isValid()) + if (updateLayoutStateNeeded != 0) { updateLayoutState(); updateLayoutStateNeeded = 0;