Reputation: 7937
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:
Thanks in advance
Upvotes: 4
Views: 10625
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