I still observed the unpleasant abrupt columns size change when starting
editing any cell.
This patch fixes this.
2006-02-15 Audrius Meskauskas <[EMAIL PROTECTED]>
* javax/swing/JTable.java (doLayout):
case AUTO_RESIZE_SUBSEQUENT_COLUMNS rewritten. Repaint the header
on exit.
javax/swing/plaf/basic/BasicTableHeaderUI.java
(MouseInputHandler.mouseDragged): Do not repaint the heade
Index: javax/swing/JTable.java
===================================================================
RCS file: /sources/classpath/classpath/javax/swing/JTable.java,v
retrieving revision 1.76
diff -u -r1.76 JTable.java
--- javax/swing/JTable.java 16 Feb 2006 13:00:10 -0000 1.76
+++ javax/swing/JTable.java 16 Feb 2006 14:23:52 -0000
@@ -3078,7 +3078,6 @@
if (ncols < 1)
return;
- int[] pref = new int[ncols];
int prefSum = 0;
int rCol = -1;
@@ -3089,7 +3088,6 @@
{
TableColumn col = columnModel.getColumn(i);
int p = col.getPreferredWidth();
- pref[i] = p;
prefSum += p;
if (resizingColumn == col)
rCol = i;
@@ -3122,10 +3120,34 @@
break;
case AUTO_RESIZE_SUBSEQUENT_COLUMNS:
- cols = new TableColumn[ncols];
- for (int i = rCol; i < ncols; ++i)
- cols[i] = columnModel.getColumn(i);
- distributeSpillResizing(cols, spill, resizingColumn);
+
+ // Subtract the width of the non-resized columns from the spill.
+ int w = 0;
+ int wp = 0;
+ TableColumn column;
+ for (int i = 0; i < rCol; i++)
+ {
+ column = columnModel.getColumn(i);
+ w += column.getWidth();
+ wp+= column.getPreferredWidth();
+ }
+
+ // The number of columns right from the column being resized.
+ int n = ncols-rCol-1;
+ if (n>0)
+ {
+ // If there are any columns on the right sied to resize.
+ spill = (getWidth()-w) - (prefSum-wp);
+ int average = spill / n;
+
+ // For all columns right from the column being resized:
+ for (int i = rCol+1; i < ncols; i++)
+ {
+ column = columnModel.getColumn(i);
+ column.setWidth(column.getPreferredWidth() + average);
+ }
+ }
+ resizingColumn.setWidth(resizingColumn.getPreferredWidth());
break;
case AUTO_RESIZE_OFF:
@@ -3149,6 +3171,7 @@
// editing is started immediately after the program start or cell
// resizing.
repaint();
+ getTableHeader().repaint();
}
/**
Index: javax/swing/plaf/basic/BasicTableHeaderUI.java
===================================================================
RCS file: /sources/classpath/classpath/javax/swing/plaf/basic/BasicTableHeaderUI.java,v
retrieving revision 1.14
diff -u -r1.14 BasicTableHeaderUI.java
--- javax/swing/plaf/basic/BasicTableHeaderUI.java 15 Feb 2006 21:48:31 -0000 1.14
+++ javax/swing/plaf/basic/BasicTableHeaderUI.java 16 Feb 2006 14:23:54 -0000
@@ -152,7 +152,6 @@
public void actionPerformed(ActionEvent e)
{
header.getTable().doLayout();
- header.repaint();
}
});
timer.setRepeats(false);