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 <[EMAIL PROTECTED]>
* 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();
}
/**
_______________________________________________
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches