Hallo,
da ich mich schon zu tode gesucht habe und nichts passendes gefunden habe, was mein Problem lösen könnte, poste ich es hier einfach mal:
Über einen Button wird ein JFileChooser aufgerufen, mit dem ein Bild geladen werden kann.
Dieses Bild soll dann in das dafür vorgesehene JPanel gezeichnet werden.
Es scheint, dass einfach die GUI (das Panel) nach dem Klick auf den entsprechenden Button und dem anschließendem Auswählen des Bildes einfach nicht neu gezeichnet zu werden.
Lasse ich das Ganze in einer anderen "Testklasse" bei der Initialisierung laufen, funktioniert es.
Innere Klasse, die das Bild laden und zeichnen soll:
Hier soll das Bild in das Panel eingefügt werden:
(Das Panel bleibt aber leer!)
Button, der die Klasse aufruft und das Panel neu zeichnen soll:
da ich mich schon zu tode gesucht habe und nichts passendes gefunden habe, was mein Problem lösen könnte, poste ich es hier einfach mal:
Über einen Button wird ein JFileChooser aufgerufen, mit dem ein Bild geladen werden kann.
Dieses Bild soll dann in das dafür vorgesehene JPanel gezeichnet werden.
Es scheint, dass einfach die GUI (das Panel) nach dem Klick auf den entsprechenden Button und dem anschließendem Auswählen des Bildes einfach nicht neu gezeichnet zu werden.
Lasse ich das Ganze in einer anderen "Testklasse" bei der Initialisierung laufen, funktioniert es.
Innere Klasse, die das Bild laden und zeichnen soll:
Java:
class HoleBild extends JPanel {
private String imageURL;
private BufferedImage pic;
private HoleBild() {
getImageURL();
}
private String getImageURL() {
JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"JPG & GIF Images", "jpg", "gif");
chooser.setFileFilter(filter);
int returnVal = chooser.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
imageURL = chooser.getSelectedFile().getAbsolutePath();
}
return imageURL;
}
@Override
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
try {
File f = new File(imageURL);
if (!f.canRead()) {
JOptionPane.showMessageDialog(EditProdukt.this, "Bild kann nicht geladen werden.");
}
pic = ImageIO.read(f);
g2.drawImage(pic, 20, 20, this);
} catch (Exception e) {
e.printStackTrace();
}
}
}
(Das Panel bleibt aber leer!)
Java:
JPanel produktPicPanel1 = new JPanel();
private void addFurtherComponents(){
HoleBild hb = new HoleBild();
produktPicPanel1.add(hb);
produktPicPanel1.validate();
produktPicPanel1.repaint();
jPanel1.repaint();
}
Java:
private void btnChooseImageActionPerformed(java.awt.event.ActionEvent evt) {
addFurtherComponents();
}