# Hintergrundgrafik JPanel



## domar (20. Okt 2007)

Hi!

Ich arbeite zurzeit mit NetBEANS 5.5 und
mein Problem besteht darin, dass ich in mein JPanel eine Hintergrundgrafik einbauen will.
Doch wenn ich ganz normal ein Bild einfüge, überdeckt dieses meine Buttons und Textfelder.
Bis jetzt habe ich noch keine Lösung gefunden, diese wieder in den Vordergrund zu bekommen

Ich freue mich schon sehr auf eine Lösung

mfg Domar


----------



## Marco13 (20. Okt 2007)

Klasse von JPanel ableiten, erst das Bild malen, dann die Children

```
class ImageJPanel extends JPanel
{
    Image image ...

    public void paintComponent(Graphics g)
    {
        g.drawImage(image,0,0,this);
        super.paintComponent(g);
    }
}
```


----------



## André Uhres (20. Okt 2007)

Wenn das System den JPanel malt, dann wird die Methode "paint" aufgerufen. Diese wiederum ruft "paintComponent", "paintBorder" und "paintChildren" auf, in dieser Reihenfolge. Deine Buttons und Textfelder werden in "paintChildren" gemalt. Die richtige Method wo das Hintergrundbild gemalt werden soll ist demnach *paintComponent*. Dann werden die Buttons und Textfelder obendrauf gemalt (in "paintChildren").
Daraus folgt ausserdem, dass *super.paintComponent(g);* immer die *erste* Anweisung von "paintComponent" sein muss.
Der super-Aufruf gewährleistet eine saubere Wiedergabe, weil dort das Offscreen Bild bereinigt wird.


----------



## Marco13 (20. Okt 2007)

_Daraus folgt ausserdem, dass super.paintComponent(g); immer die erste Anweisung von "paintComponent" sein muss. _
... meistens, zumindest :wink:


----------



## André Uhres (20. Okt 2007)

Marco13 hat gesagt.:
			
		

> ..meistens, zumindest..


Ausnahmen bestätigen die Regel


----------



## Guest (22. Okt 2007)

Marco13 hat gesagt.:
			
		

> Klasse von JPanel ableiten, erst das Bild malen, dann die Children
> 
> ```
> class ImageJPanel extends JPanel
> ...



Also muss ich nur die Klasse jPanel vererben und vor super.paintComponent(g); mein Bild einfügen?
Gar nicht so kompliziert für dass, das es keiner in anderen Foren weiß 

Danke


----------



## André Uhres (22. Okt 2007)

Anonymous hat gesagt.:
			
		

> ..und vor super.paintComponent(g); mein Bild einfügen?..


Besser: *nach* super.paintComponent(g); :wink:
(siehe mein Beitrag oben)


----------



## Marco13 (22. Okt 2007)

Häm  ???:L eigentlich zielte mein Kommentar darauf ab, das gerade DAS so eine Ausnahme ist, die die Regel bestätigt: Wenn man ERST super.paintComponent macht, und DANN das Bild malt, werden Buttons usw. (die ja in paintComponent gemalt werden) später vom Bild übermalt ?!  ???:L


----------



## André Uhres (22. Okt 2007)

Marco13 hat gesagt.:
			
		

> ..Buttons usw. (die ja in paintComponent gemalt werden)..


 :noe: die Buttons und alle anderen Kindkomponenten werden in paintChildren gemalt (siehe mein Beitrag oben)


----------

