The program was showing incorrect (default rather than custom) table headers with Classpath. We found that this is because the header value is set once again in setColumnModel.

If the column header value is set by calling setHeaderValue(..), the table must use that value and do not request the default value from the table model.

2006-02-15  Audrius Meskauskas  <[EMAIL PROTECTED]>

   * examples/gnu/classpath/examples/swing/TableDemo.java
     (TModel, createContent): Explain which value appears in the header.
   * javax/swing/JTable.java (setColumnModel): Only set the
   column header value if the getHeaderValue() returns null.

Index: examples/gnu/classpath/examples/swing/TableDemo.java
===================================================================
RCS file: /sources/classpath/classpath/examples/gnu/classpath/examples/swing/TableDemo.java,v
retrieving revision 1.3
diff -u -r1.3 TableDemo.java
--- examples/gnu/classpath/examples/swing/TableDemo.java	14 Feb 2006 22:27:54 -0000	1.3
+++ examples/gnu/classpath/examples/swing/TableDemo.java	15 Feb 2006 08:40:58 -0000
@@ -48,7 +48,6 @@
 import javax.swing.table.DefaultTableColumnModel;
 import javax.swing.table.DefaultTableModel;
 import javax.swing.table.TableColumn;
-import javax.swing.table.TableColumnModel;
 
 /**
  * Displays the editable table. The first column consists of check boxes.
@@ -115,11 +114,13 @@
     }
     
     /**
-     * The column name.
+     * The column name, as suggested by model. This header should not be
+     * visible, as it is overridden by setting the header name with
+     * [EMAIL PROTECTED] TableColumn#setHeaderValue} in [EMAIL PROTECTED] TableDemo#createContent}.
      */
     public String getColumnName(int column)
     {
-     return "Demo "+column;
+       return "Error "+column;
     }
     
     /**
@@ -191,10 +192,16 @@
         DefaultTableColumnModel cm = new DefaultTableColumnModel();
         for (int i = 0; i < cols; i++)
           {
-            int w = 100+20*i;
             TableColumn column = new TableColumn(i);
-            column.setPreferredWidth(w);
+            
+            // Showing the variable width columns.
+            int width = 100+20*i;
+            column.setPreferredWidth(width);
+            
+            // If we do not set the header value here, the value, returned
+            // by model, is used.
             column.setHeaderValue("Width +"+(20*i));
+            
             cm.addColumn(column);            
           }
 
Index: javax/swing/JTable.java
===================================================================
RCS file: /sources/classpath/classpath/javax/swing/JTable.java,v
retrieving revision 1.72
diff -u -r1.72 JTable.java
--- javax/swing/JTable.java	14 Feb 2006 22:27:54 -0000	1.72
+++ javax/swing/JTable.java	15 Feb 2006 08:41:27 -0000
@@ -2763,8 +2763,13 @@
     if (dataModel != null && columnModel != null)
       {
         int ncols = getColumnCount();
+        TableColumn column;
         for (int i = 0; i < ncols; ++i)
-          columnModel.getColumn(i).setHeaderValue(dataModel.getColumnName(i));
+          {
+            column = columnModel.getColumn(i); 
+            if (column.getHeaderValue()==null)
+              column.setHeaderValue(dataModel.getColumnName(i));
+          }
       }
 
     // according to Sun's spec we also have to set the tableHeader's

Reply via email to