# drawImage auf JPanel bleibt ohne Auswirkungen



## bloodyrocky (25. Mai 2010)

Hallo Leute,

ich versuche gerade ein Bild in einem JPanel darzustellen, jedoch wird das Bild nicht angezeigt, ganz zu schweigen von dem Panel und ich versteh nicht warum. Hier mal der Code, vielleicht habe ich ja nur etwas übersehen:

```
public class TrainingsAnimation extends JPanel{
    private Image[] imgArray = new Image[3];
    private Toolkit tk = Toolkit.getDefaultToolkit();
    private MediaTracker mt = new MediaTracker(this);

    public TrainingsAnimation(){
        setLayout(null);
        setPreferredSize(new Dimension(400, 200));
        setBackground(Color.red);

        imgArray[0] = tk.getImage("balken.png");
        imgArray[1] = tk.getImage("ist.png");
        imgArray[2] = tk.getImage("soll.png");

        mt.addImage(imgArray[0], 1);
        mt.addImage(imgArray[1], 2);
        mt.addImage(imgArray[2], 3);

        try{
            mt.waitForAll();
        } catch(InterruptedException ex){
            System.out.println("Vorgang wurde unterbrochen: "+ ex);
        }
    }
    @Override
    public void paint(Graphics g){
        g.drawImage(imgArray[0], 0, 0, null);
    }
}
```

Und hier der Aufruf auf meinem JFrame:

```
TrainingsAnimation ta = new TrainingsAnimation();
        centerPanel.add(ta, BorderLayout.CENTER);
```

Vielen Dank für's Licht im Dunkeln machen 

P.S.: Hab's auch mit paintComponent(Graphics g) versucht, mit dem gleichen Ergebnis.


----------



## Blakh (25. Mai 2010)

anstatt paint mach mal das:


```
protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		
//zB so :
		ImageIcon.paintIcon(this, g, 0, 0);

	}
```

und setz Panel am Anfang auf visible ... vllt. liegts ja daran


----------



## Gast2 (25. Mai 2010)

wie groß das image gezeichnet werden soll wäre auch interssant ...


----------



## Michael... (25. Mai 2010)

eventuell ist auch imgArray[0]==null


----------



## Marco13 (25. Mai 2010)

Visible machen muss man das nicht extra, aber man sollte schon paintComponent überschreiben statt paint... was das mit dem ImageIcon sollte, weiß ich abern nicht

```
protected void paintComponent(Graphics g) 
{
    super.paintComponent(g);
    g.drawImage(images[0],0,0,this);
}
```


----------



## Blakh (25. Mai 2010)

sollte ein Objekt vom Typ ImageIcon sein ... sorry


----------



## bloodyrocky (25. Mai 2010)

Danke blakh, war aber klar das ein Objekt gemeint ist 
@SirWayne: Wen soll es interessieren wie groß die Bilder sind? drawImage sollte in der von mir verwendeten Form einfach das Bild zeichnen wie es ist. Angezeigt wird evtl. dann halt nur ein Teil, sollte es zu groß sein.

So ich habe den Übeltäter gefunden, das Array ist zwar laut Debug nicht leer, aber allem Anschein nach kann er trotzdem kein Bild anzeigen.

Wenn ich die paint wie folgt abändere, funktioniert es:

```
public void paint(Graphics g){
        BufferedImage bufimg = null;
        try{
        bufimg = ImageIO.read(new File("C:\\balken.png"));
        } catch (Exception ex){

        }
        g.drawImage(bufimg, 100, 45, null);
        //new ImageIcon(bufimg).paintIcon(this, g, 100, 45);
    }
```

Aber ich muss die Bilder ja irgendwie laden und möchte keinen absoluten Pfad angeben. Wie gestallte ich das, wenn er sie so nicht nimmt? Ich habe es auch mal spontan ohne Array gemacht (sind ja nur 3 Bilder, aber auch hier kommt nichts mehr an.

Kann mir da noch wer helfen?

Vielen Dank schonmal an euch beiden.


----------



## Michael... (25. Mai 2010)

Die Bilder über getResource() laden

```
Image img = new ImageIcon(this.getClass().getResource("/balken.png")).getImage();
```
ist halt abhängig davon wo die Bilder liegen - in dem Fall im selben Verzeichnis wie das class-File.


----------



## Gast2 (25. Mai 2010)

edit: egal -.-


----------



## bloodyrocky (25. Mai 2010)

Ja die Bilder liegen im gleichen Ordner, aber der "/" muss weg.

Vielen Dank!!!


----------

