TheGuyNextDoor
TheGuyNextDoor

Reputation: 7937

Adding an Icon to JTable by overriding DefaultTableCellRenderer

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

Upvotes: 4

Views: 10625

Answers (1)

Peter
Peter

Reputation: 5798

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,

Upvotes: 5

Related Questions