# ImageIcon neuladen



## Benzol (28. Februar 2006)

Moin,
ich bin der Meinung, ich hätte etwas gelesen, das ich ein ImageIcon manuell neuladen muss, dammit etwaige Änderungen angezeigt werden. Ich kann diese Stelle nirgents mehr finden :/
Kann mir einer einen Hinweis geben?


----------



## elmato (28. Februar 2006)

Also das wäre mir neu, ein repaint sollte hier genügen..
mfg elmato


----------



## Benzol (28. Februar 2006)

Das hilft iregntwie nicht. Ich habe erstelle jetzt jedesmal ein Vorschaubild mit einem eigenen Dateiname und lösche das Alte... jetzt zeigt ers richtig an.


----------



## elmato (28. Februar 2006)

Klingt sehr umständlich und Rechenintensiv, was versuchst du den zu machen bzw. was veränderst du den an dem Bild?


----------



## Benzol (28. Februar 2006)

Es wird für jedes Bild, das ich hochlade, ein Vorschaubild erstellt was z.B. thumb.jpg heißen soll. Das Bild liegt in dem Temporären Verzeichniss des Benutzers. Von da wird dann das Icon erstellt. Wenn ich das Bild nur überschreibe und ein neues Icon erstelle, bleibt das alte Bild sozuisagen erhalten. ich schätzte, das er das dann aus dem Cache rausnimmt.


----------



## y0g1 (20. Mai 2006)

Kann keiner helfen? Für einen Hinweis wäre ich auch sehr dankbar.


----------



## flashray (20. Mai 2006)

Hallo,

Für das "ImageIcon neuladen" braucht man lediglich das Bild neu einzulesen (getImage()) und neuzuzeichen (repaint()).


```
import java.awt.BorderLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class IconRefreshExample extends JFrame implements ActionListener {

	private Toolkit tk = Toolkit.getDefaultToolkit();

	private JLabel l = new JLabel(new ImageIcon("b1.jpg"));

	private JButton b = new JButton("Refresh");

	public IconRefreshExample() {
		super("Example");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setAlwaysOnTop(true);
		this.setLocationByPlatform(true);

		this.add(l, BorderLayout.CENTER);
		this.add(b, BorderLayout.SOUTH);

		b.addActionListener(this);

		this.pack();
		this.setVisible(true);
	}

	public static void main(String[] args) {
		new IconRefreshExample();
	}

	public void actionPerformed(ActionEvent e) {
		((ImageIcon) l.getIcon()).getImage().flush();
		((ImageIcon) l.getIcon()).setImage(tk.getImage("b1.jpg"));
		l.repaint();
	}
}
```

Vg Erdal


----------



## y0g1 (20. Mai 2006)

Danke für deine Antwort Erdal!

Leider ist es nicht das was ich suche. Denn wenn ich das Bild verändere bzw. überschreibe, zeigt mir dein Programm immer noch das alte Bild an.


----------



## flashray (20. Mai 2006)

Hallo y0g1,

hab dem obigen Code noch eine Zeile (flush()) hinzugefügt. Jetzt klappt es!


Vg Erdal


----------



## y0g1 (20. Mai 2006)

SUPER! Danke vielmals! 

Gruss

David


----------

