Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding an Icon to JTable by overriding DefaultTableCellRenderer

Tags:

java

swing

jtable

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

like image 605
n002213f Avatar asked Sep 18 '25 14:09

n002213f


1 Answers

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,

like image 139
Peter Avatar answered Sep 20 '25 05:09

Peter