# ImageIcon in Cell der JTable



## Screen (18. Jun 2011)

Hallo

Ich möchte ein ImageIcon bzw. ein Bild in eine Zelle meiner JTable einfügen.

Problem: Wenn ich den CellRenderer benutze wird die ganze Spalte mit dem Bild ausgefüllt und ich kann mit setValueAt kein ImageIcon an eine bestimmte Zelle setzen. 

Vermutung: Es liegt vielleicht am DefaultTableModel,da es weniger Übergabeparameter hat...

Frage: Wie setze ich ein Bild in eine bestimmte Zelle mit setValueAt ohne ,dass der CellRenderer die gesamte Spalte zuvor mit dem Bild füllt ?


```
ImageIcon icon22 = new ImageIcon(getClass().getResource("bild.jpg"));                                    
jTable1.getColumnModel().getColumn(1).setCellRenderer(new IconTableCellRenderer()); 


model2.setValueAt(icon22, 0, 1);  // funktioniert nicht ;(

class IconTableCellRenderer 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 (value instanceof ImageIcon)  
            {  
                label.setText(null);  
                label.setIcon((ImageIcon)value);  
            } 
            return label;
        }  
    }
```


----------



## eRaaaa (18. Jun 2011)

Probiere mal in deinem Renderer ein else-Block einzufügen 

```
else{
			label.setIcon(null);
		}
```

Für die anderen Fälle musst du dann das JLabel-Icon natürlich wieder zurücksetzen. Er betritt in den Fällen zwar deinen if-Block nicht mehr, aber gesetzt bleibt das Icon auf *dem* Label ja dennoch! Also verständlicher: Das JLabel label bzw. der Rückgabewert von 
	
	
	
	





```
getTableCellRendererComponent
```
 ist immer das *selbe* Label!


----------



## Screen (18. Jun 2011)

eRaaaa hat gesagt.:


> Probiere mal in deinem Renderer ein else-Block einzufügen
> 
> ```
> else{
> ...




Das ist die Lösung.  
Danke ^^


----------

