# Bild in ein JPanel laden



## caphunter (21. Jul 2009)

Hi,

ich such schon seit mehreren Stunden (4 um genau zu sein) nach einer Lösung ein Bild in ein JPanel zu laden. Hab mehrere Varianten versucht (ImageIcon, MediaTracker,  ImageIO,...) keine hat gefunzt. Ich will einfach nur ein kleines PNG-Bild in das JPanel zeichnen. Wieso funzt das bei mir nicht? Alles was beim Ausführen kommt ist entweder ne Exception (ImageIO) die meint:"Can't read input file!". Oder ich bekomm nur nen hässlichen grauen Hintergrund.

Und nochmal JA ich hab gegoogelt und die Boardsuche benutzt (ich kann euch von mir aus alle Links geben die ich angeklickt hab...).



```
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package graphics;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 *
 * @author HEADSHOT
 */
public class Test1 extends JPanel
{

    @Override
    public void paint(Graphics g)
    {
        Image img;
        String imgPfad = "abc.jpg";
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        MediaTracker md = new MediaTracker(this);
        img = toolkit.getImage(imgPfad);
        md.addImage(img, 0, 300, 300);

        if (img != null)
        {
            System.out.println("Das Bild ist vorhanden!");
            g.drawImage(img, 100, 100, this);
            System.out.println("Blub");
        }
    }

    public static void main(String[] args)
    {
        JFrame frame = new JFrame("Test1");
        frame.getContentPane().add(new Test1());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500,500);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}
```

PS: Das Bild befindet sich im selben Ordner wie die Source


----------



## java123 (22. Jul 2009)

Hi, 

entweder

```
String imgPfad = "src/abc.jpg";
```
oder

```
URL url = getClass().getResource("abc.jpg");
img = getToolkit().getImage(url);
```


----------



## caphunter (22. Jul 2009)

Hm, funzt beides nicht. Immer noch der graue Hintergund...


----------



## L-ectron-X (22. Jul 2009)

Entweder zeichnest du das Bild direkt auf das Panel:

```
import javax.swing.*;
import java.awt.*;

class PicturePanel extends JPanel {
   private Image image;

   PicturePanel(Image image) {
      this.image = image;
   }
   
   protected void paintComponent(Graphics g) {
      super.paintComponent(g);
      if(image != null) {
         g.drawImage(image, 0, 0, this);
      }
   }
}
```

oder du lädst es als ImageIcon in ein JLabel und fügst es mit der add()-Methode ins Panel ein.
Grafikdateien laden und anzeigen ? Byte-Welt Wiki


----------



## caphunter (22. Jul 2009)

Ich weiß zwar nicht ob ich deinen Code richtig umgesetzt hab L-ectron-X, aber siehs dir selbst mal an:


```
package graphics;

import javax.swing.*;
import java.awt.*;

class PicturePanel extends JPanel {
   private Image image;

   PicturePanel(Image image) {
      this.image = image;
   }

    @Override
   protected void paintComponent(Graphics g) {
      super.paintComponent(g);
      if(image != null) {
         g.drawImage(image, 0, 0, this);
      }
   }
    public static void main(String[] args) {
        JFrame frame = new JFrame("Test1");
        Image img = null;
        String imgPfad = "C:\\Java\\Uebungen\\src\\graphics\\abc.png"; //edited
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        img = toolkit.getImage(imgPfad);
        frame.getContentPane().add(new PicturePanel(img));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 500);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}
```

EDIT: Hab jetzt mal Java und NetBeans deinstalliert und wieder installiert und komm aufs gleiche hinaus - es funzt nicht.

EDIT2: Ich lag wohl falsch in der Annahme dass man den Pfad zu einem Bild der im selben Package wie der Source ist, *nicht* angeben muss. Hab einfach den Pfad von "abc.png" mit "C:\\Java\\Uebungen\\src\\graphics\\abc.png" ersetzt - jetzt funzts endlich 

Danke an alle die mir geholfen haben! :toll::applaus:
Thread kann geclosed werden.


----------

