package obrazy;
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
public class LadujObr extends Canvas{
BufferedImage obraz;
int szer, wys;
public LadujObr(String plik, JPanel wysw){
obraz = null;
try{
obraz=ImageIO.read(new File(plik));
}catch(IOException e){
e.printStackTrace();
System.exit(1);
}
szer = wysw.getWidth();
wys = wysw.getHeight();
setSize(wysw.getWidth(), wysw.getHeight());
wysw.add(this);
}
public void paint(Graphics g){
if(obraz!=null){
g.drawImage(obraz,0,0,szer,wys,null);
}
g.dispose();
}
}
wie ktoś jak zrobić przeładowanie ponowne obrazka w tym kodzie, chodzi oto że za pierwszym razem ładuje mi się obrazek poprawnie, natomiast jak na jego miejsce chce nie zamykając obrazka wczytać kolejny to nic się nie dzieje... Proszę o pomoc....
Pomogłem sobie sam :D... wystarczyło użyć metodu
wysw.removeAll();
co spowodowało iż wszystko co na panelu zostało narysowane zostało usunięte. Teoretycznie działa, sprawdzałem pod kątem MemoryLeak i nie wiem czy to normalne w JAVIE czy nie ale otwarcie po sobie kolejno trzech obrazków zarezerwowało mi w pamięci 25 MB nie wiem na co :/ z początku myślałem że to typowy wyciek pamięci i czegoś nie zwalnia lub cóś ale zauważyłem że po trzecim obrazku wszystko już stoi i się nie zmienia... a więc nie jest to typowy MemLeak. Dziwne bynajmniej... jeśli ktoś ma lepszą metodę przerysowania obrazka niech się tutaj nią pochwali... repaint(); nie działa :D, być może źle używam... powyższy kod możecie śmiało wykorzystywać do swoich potrzeb.