The icons were not visible because they class is ImageIcon, not Icon. Rendering rearranged columns also revealed some problems in other methods (see changelog).

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

   * javax/swing/JTable.java (IconCellRenderer): Set the component
   text to empty string. (createDefaultRenderers): Register
   IconCellRenderer also for ImageIcon.
   (getCellEditor(int, int), getCellRenderer(int, int)):
   Use model index for data model and column index for column model.
   (getColumnClass): Convert to model index before requesting class
   from model.
Index: javax/swing/JTable.java
===================================================================
RCS file: /sources/classpath/classpath/javax/swing/JTable.java,v
retrieving revision 1.79
diff -u -r1.79 JTable.java
--- javax/swing/JTable.java	16 Feb 2006 23:22:53 -0000	1.79
+++ javax/swing/JTable.java	17 Feb 2006 11:49:16 -0000
@@ -1233,6 +1233,7 @@
         {
           Icon iconValue = (Icon) value;
           setIcon(iconValue);
+          setText("");
         }
       return this;
     }
@@ -1748,7 +1749,7 @@
   
   /**
    * Create the default renderers for this table. The default method creates
-   * renderers for Boolean, Number, Double, Date and Icon.
+   * renderers for Boolean, Number, Double, Date, Icon and ImageIcon.
    *
    */
   protected void createDefaultRenderers()
@@ -1759,6 +1760,7 @@
     setDefaultRenderer(Double.class, new FloatCellRenderer());
     setDefaultRenderer(Date.class, new DateCellRenderer());
     setDefaultRenderer(Icon.class, new IconCellRenderer());
+    setDefaultRenderer(ImageIcon.class, new IconCellRenderer());    
   }
   
   /**
@@ -2108,24 +2110,25 @@
 
   /**
    * Get the cell editor, suitable for editing the given cell. The default
-   * method requests the editor from the column model. If the column model
-   * does not provide the editor, the call is forwarded to the 
+   * method requests the editor from the column model. If the column model does
+   * not provide the editor, the call is forwarded to the
    * [EMAIL PROTECTED] #getDefaultEditor(Class)} with the parameter, obtained from
    * [EMAIL PROTECTED] TableModel#getColumnClass(int)}.
    * 
    * @param row the cell row
    * @param column the cell column
-   * 
    * @return the editor to edit that cell
    */
   public TableCellEditor getCellEditor(int row, int column)
   {
-    int mcolumn = convertColumnIndexToModel(column);
-    TableCellEditor editor = columnModel.getColumn(mcolumn).getCellEditor();
+    TableCellEditor editor = columnModel.getColumn(column).getCellEditor();
 
     if (editor == null)
-      editor = getDefaultEditor(dataModel.getColumnClass(mcolumn));
-    
+      {
+        int mcolumn = convertColumnIndexToModel(column);
+        editor = getDefaultEditor(dataModel.getColumnClass(mcolumn));
+      }
+
     return editor;
   }
   
@@ -2155,25 +2158,24 @@
    * 
    * @param row the cell row
    * @param column the cell column
-   * 
    * @return the cell renderer to render that cell.
    */
   public TableCellRenderer getCellRenderer(int row, int column)
   {
-    int mcolumn = convertColumnIndexToModel(column);
-    TableCellRenderer renderer =
-      columnModel.getColumn(mcolumn).getCellRenderer();
+    TableCellRenderer renderer = columnModel.getColumn(column).getCellRenderer();
     if (renderer == null)
-      renderer = getDefaultRenderer(getColumnClass(mcolumn));
-
+      {
+        int mcolumn = convertColumnIndexToModel(column);
+        renderer = getDefaultRenderer(dataModel.getColumnClass(mcolumn));
+      }
     return renderer;
   }
   
   /**
    * Set default renderer for rendering the given data type.
    * 
-   * @param columnClass the data type (String, Boolean and so on) that must
-   * be rendered.
+   * @param columnClass the data type (String, Boolean and so on) that must be
+   *          rendered.
    * @param rend the renderer that will rend this data type
    */
   public void setDefaultRenderer(Class columnClass, TableCellRenderer rend)
@@ -3264,14 +3266,14 @@
    * Get the class (datatype) of the column. The cells are rendered and edited
    * differently, depending from they data type.
    * 
-   * @param column the column
+   * @param column the column (not the model index).
    * 
    * @return the class, defining data type of that column (String.class for
    * String, Boolean.class for boolean and so on).
    */
   public Class getColumnClass(int column)
   {
-    return getModel().getColumnClass(column);
+    return getModel().getColumnClass(convertColumnIndexToModel(column));
   }
   
   /**

Reply via email to