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);

Reply via email to