classpath-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[cp-patches] FYI: JTable fixes


From: Roman Kennke
Subject: [cp-patches] FYI: JTable fixes
Date: Fri, 24 Jun 2005 14:41:51 +0200
User-agent: Mozilla Thunderbird 1.0.2 (X11/20050317)

Hi,

I checked in some fixes for JTable related stuff. Basically this makes sure that the columnModel and tableHeader are synced when the tableModel is changed. See ChangeLog entry for details.

2005-06-24  Roman Kennke  <address@hidden>

       * javax/swing/JTable.java
(constructor): Call setModel() instead of setting the model directly.
       This makes sure that listeners and the columnModel are set up
       correctly.
       (initializeLocalVars): Set up tableHeader before the columnModel.
       This way we already have a tableHeader when setColumnModel is called
       and it can be updated accordingly.
       (tableChanged): Update the columnModel when the table structure
       changes.
       (setColumnModel): Also set the columnModel of the tableHeader here.
       This is specified in Sun's API documentation.
       * javax/swing/table/DefaultTableModel.java
       (setDataVector): Fire a structureChanged event, so that the
       columnModel and header columnModel are updated correctly.

/Roman

Index: javax/swing/JTable.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/JTable.java,v
retrieving revision 1.26
diff -u -r1.26 JTable.java
--- javax/swing/JTable.java     18 May 2005 14:05:20 -0000      1.26
+++ javax/swing/JTable.java     24 Jun 2005 12:39:47 -0000
@@ -616,7 +616,7 @@
    */
   public JTable (TableModel dm, TableColumnModel cm, ListSelectionModel sm)
   {
-    this.dataModel = dm == null ? createDefaultDataModel() : dm;
+    setModel(dm == null ? createDefaultDataModel() : dm);
     setSelectionModel(sm == null ? createDefaultSelectionModel() : sm);
 
     this.columnModel = cm;
@@ -626,6 +626,7 @@
 
   protected void initializeLocalVars()
   {
+    setTableHeader(createDefaultTableHeader());
     this.autoCreateColumnsFromModel = false;
     if (columnModel == null)
       {
@@ -653,7 +654,6 @@
     this.editingColumn = -1;
     this.editingRow = -1;
     setIntercellSpacing(new Dimension(1,1));
-    setTableHeader(createDefaultTableHeader());
   }
 
   /**
@@ -778,6 +778,13 @@
 
   public void tableChanged (TableModelEvent event)
   {
+    // update the column model from the table model if the structure has
+    // changed and the flag autoCreateColumnsFromModel is set
+    if ((event.getFirstRow() ==TableModelEvent.HEADER_ROW)
+        && autoCreateColumnsFromModel)
+
+        createColumnsFromModel();
+
     repaint();
   }
 
@@ -1557,6 +1564,12 @@
         for (int i = 0; i < ncols; ++i)
           columnModel.getColumn(i).setHeaderValue(dataModel.getColumnName(i));
       }
+
+    // according to Sun's spec we also have to set the tableHeader's
+    // column model here
+    if (tableHeader != null)
+      tableHeader.setColumnModel(c);
+
     revalidate();
     repaint();
   }
Index: javax/swing/table/DefaultTableModel.java
===================================================================
RCS file: 
/cvsroot/classpath/classpath/javax/swing/table/DefaultTableModel.java,v
retrieving revision 1.9
diff -u -r1.9 DefaultTableModel.java
--- javax/swing/table/DefaultTableModel.java    7 Jan 2005 18:32:49 -0000       
1.9
+++ javax/swing/table/DefaultTableModel.java    24 Jun 2005 12:39:47 -0000
@@ -186,6 +186,7 @@
     for (int r = 0; r < data.size(); r++) {
       ((Vector) dataVector.get(r)).setSize(columnNames.size());
     }          
+    fireTableStructureChanged();
   }
 
   /**

reply via email to

[Prev in Thread] Current Thread [Next in Thread]