P
Pascal J
Gast
Hallo Leute,
ich habe folgendes Problem:
Ich habe ein JFrame auf welchem ein JPanel sitzt, welcher wiederrum einen JPanel (ImagePanel abgeleitet on JPanel) beinhaltet, welches ein Bild darstellt. Das ganze soll einfach ein Bildanzeiger sein, womit ich auch durch die in den Ordner vorhandenen Bilder gehen kann (wie die Windows Bildanzeige).
Problem ist allerdings, dass wenn ich 20 Bilder durchgehe der Speicherverbrauch der Applikation schon fast bei 270mb liegt... Es scheint als würde er noch die alten Bilder (die gezeichnet wurden) im Speicher behalten (das vermute ich, da der Speicherverbrauch nicht steigt, wenn ein schon mal aufgerufenes Bild aufrufe).
Funktion zum darstellen des Bildes in der Klasse ImagePanel (welche JPanel erweitert)
[ImagePanel.getScaledSize gibt nur die berechnete größe zurück in welcher das Bild angezeigt werden muss, damit es auf den Bildschirm passt.]
Nach dem klick auf den Next-Button wird folgendes ausgeführt um das neue Bild zu zeigen:
[Nachfolgender Code steht in der Hauptklasse-Klasse welch JFrame erweitert]
ich habe folgendes Problem:
Ich habe ein JFrame auf welchem ein JPanel sitzt, welcher wiederrum einen JPanel (ImagePanel abgeleitet on JPanel) beinhaltet, welches ein Bild darstellt. Das ganze soll einfach ein Bildanzeiger sein, womit ich auch durch die in den Ordner vorhandenen Bilder gehen kann (wie die Windows Bildanzeige).
Problem ist allerdings, dass wenn ich 20 Bilder durchgehe der Speicherverbrauch der Applikation schon fast bei 270mb liegt... Es scheint als würde er noch die alten Bilder (die gezeichnet wurden) im Speicher behalten (das vermute ich, da der Speicherverbrauch nicht steigt, wenn ein schon mal aufgerufenes Bild aufrufe).
Funktion zum darstellen des Bildes in der Klasse ImagePanel (welche JPanel erweitert)
[ImagePanel.getScaledSize gibt nur die berechnete größe zurück in welcher das Bild angezeigt werden muss, damit es auf den Bildschirm passt.]
Java:
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
Image img = new ImageIcon(this.sPicture).getImage();
Dimension resize = ImagePanel.getScaledSize(this.getWidth(), this.getHeight(), img.getWidth(this), img.getHeight(this));
this.iWidth = resize.width;
this.iHeight = resize.height;
setSize(resize);
g2.setColor(new Color(0, 0, 0));
g2.fillRect(0, 0, this.getWidth(), this.getHeight());
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2.drawImage(img, 0, 0, resize.width, resize.height, this);
// Draw borders
g2.setColor(new Color(180, 180, 180));
g2.drawLine(0, 0, resize.width, 0);
g2.drawLine(0, resize.height-1, resize.width, resize.height-1);
g2.drawLine(0, 0, 0, resize.height-1);
g2.drawLine(resize.width-1, 0, resize.width-1, resize.height-1);
}
Nach dem klick auf den Next-Button wird folgendes ausgeführt um das neue Bild zu zeigen:
[Nachfolgender Code steht in der Hauptklasse-Klasse welch JFrame erweitert]
Java:
private void redrawPicture() {
this.setTitle(this.programName + " [" +this.getPicture()+"]");
ip.setPicture(this.getPicture());
ip.repaint();
}