tags:

views:

1458

answers:

1

I'm trying to add an icon to a particular JTable column by specifying my own table cell renderer as below (based on parts of this tutorial):

public class MyTableCellRenderer extends DefaultTableCellRenderer {

    public Component getTableCellRendererComponent(JTable table, Object value,
      boolean isSelected, boolean hasFocus, int row, int column) {

     JLabel label = (JLabel)super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

     if(column == MyTableModel.IMAGE_COLUMN){
      String status = (String)value;
      Icon icon = StatusImageUtil.getStatusIcon(status);

      if(icon == null){
       label.setText(status);
      }else{
       label.setIcon(icon);
      }
     }
     return label;
    }
}

The above code works but:

  1. All cell have the icon instead of the specific one i want specified in the if statement
  2. Cell MyTableModel.IMAGE_COLUMN which should only have an icon also has text.

Thanks in advance

+1  A: 

For better performance reasons JTable reuses the same label for each cell it renders. This means you need to set both text and icon each time you change it.

The same goes for fonts, backgroundcolors and the like

 if(icon == null){
                    label.setText(status);
                    label.setIcon(null);
            }else{  
                    label.setText("");
                    label.setIcon(icon);
            }

should do the trick,

Peter
thanks, didn't know that the same label is reused for all table cells. Using the above code i still got the same results. I have solved it by setting to null the icon just after casting the table cell renderer to JLabel.
n002213f
yup my adivce did not help because i forgot about the column == MyTableModel.IMAGE_COLUMNtest
Peter