ImageIcon in Cell der JTable

Screen

Bekanntes Mitglied
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 ?

Java:
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;
        }  
    }
 
Zuletzt bearbeitet:
Probiere mal in deinem Renderer ein else-Block einzufügen 🙂
Java:
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
Code:
getTableCellRendererComponent
ist immer das selbe Label!
 
Probiere mal in deinem Renderer ein else-Block einzufügen 🙂
Java:
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
Code:
getTableCellRendererComponent
ist immer das selbe Label!


Das ist die Lösung. 😉
Danke ^^
 

Neue Themen


Zurück
Oben