Hi zusammen,
habe jetzt die Forensuche komplett durch, aber nichts so richtig gefunden, was mir hilft.
Folgender Aufbau:
- JFrame mit BorderLayout
- LEFT ein JTree (funzt einwandfrei)
- CENTER ein JPanel (heißt bei mir contentPanel) in einer JScrollPane
Folgende Funktion:
- Klick auf JTree durchsucht angeklickten Ordner nach jpg, gif, png
- Alle gefundenen Grafiken sollen in weitere JPanels gepackt werden, welche dann wiederum in das contentPanel gepackt werden
Folgendes Problem:
- java.lang.OutOfMemoryError: Java heap space
- Ich weiß noch nicht so richtig, wie ich es am besten angehe, also das Image als ImageIcon in ein JLabel legen oder als Grafik direkt zeichnen lassen? Unter das Bild sollen noch diverse kleine Buttons und eine ComboBox.
Zudem müsste ich das Laden und Resizen glaube ich in einem Thread laufen lassen ... aber dann spuckt Java mir noch schneller die heap Exception aus.
Würde mich sehr über Hinweise und Tips freuen.
LG
Tino
habe jetzt die Forensuche komplett durch, aber nichts so richtig gefunden, was mir hilft.
Folgender Aufbau:
- JFrame mit BorderLayout
- LEFT ein JTree (funzt einwandfrei)
- CENTER ein JPanel (heißt bei mir contentPanel) in einer JScrollPane
Folgende Funktion:
- Klick auf JTree durchsucht angeklickten Ordner nach jpg, gif, png
- Alle gefundenen Grafiken sollen in weitere JPanels gepackt werden, welche dann wiederum in das contentPanel gepackt werden
Folgendes Problem:
- java.lang.OutOfMemoryError: Java heap space
- Ich weiß noch nicht so richtig, wie ich es am besten angehe, also das Image als ImageIcon in ein JLabel legen oder als Grafik direkt zeichnen lassen? Unter das Bild sollen noch diverse kleine Buttons und eine ComboBox.
Code:
package source;
import java.awt.BorderLayout;
import java.awt.Image;
import java.awt.MediaTracker;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class PhotoContent extends JPanel {
private Image img;
private JLabel imageLabel;
private int imgWidthOrg;
private int imgHeightOrg;
private int imgWidthNew;
private int imgHeightNew;
private int difference;
public PhotoContent(String filePath) {
this.setLayout(new BorderLayout());
this.imageLabel = new JLabel("", JLabel.CENTER);
this.add(this.imageLabel, BorderLayout.CENTER);
this.showImage(filePath);
}
private void showImage(String filePath) {
try {
this.img = new ImageIcon(ImageIO.read(new File(filePath))).getImage();
MediaTracker mt = new MediaTracker(this);
mt.removeImage(img);
mt.addImage(img, 0);
try {
mt.waitForAll();
this.imgWidthOrg = this.img.getWidth(this);
this.imgHeightOrg = this.img.getHeight(this);
if (this.imgWidthOrg > 150) {
this.imgWidthNew = 150;
this.difference = (this.imgWidthNew * 100) / this.imgWidthOrg;
this.imgHeightNew = (this.imgHeightOrg * this.difference)/100;
if (this.imgHeightNew > 150) {
this.imgHeightNew = 150;
this.difference = (this.imgHeightNew * 100) / this.imgHeightOrg;
this.imgWidthNew = (this.imgWidthOrg * this.difference) / 100;
}
}
this.img = this.img.getScaledInstance(this.imgWidthNew, this.imgHeightNew, Image.SCALE_FAST);
this.imageLabel.setIcon(new ImageIcon(img));
} catch (InterruptedException e) {
e.printStackTrace();
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
Zudem müsste ich das Laden und Resizen glaube ich in einem Thread laufen lassen ... aber dann spuckt Java mir noch schneller die heap Exception aus.
Würde mich sehr über Hinweise und Tips freuen.
LG
Tino