# Bild anzeigen im JFrame



## Stiewen (21. Mrz 2006)

Aloa Leutz, 

Iich verzweifle gerade... Ich habe einen JFrame. Diesen hab ich setUndecorated(true) gesetzt. Jetzt möchte ich ein Bild im Hintergrund haben:

```
Graphics g = getGraphics();
        Image img = getToolkit().getImage("SignedOn.jpg");
        g.drawImage(img, 0, 0, this);
```
Leider zeigt er mir eine NullPointerException an in der Zeile, wo drawImage steht. Ich habe es ohne einen Container (getContentPane()) und mit probiert... könnt ihr mir helfen?`???????


----------



## norman (21. Mrz 2006)

ich glaube ich habe es mal mit 
	
	
	
	





```
g.drawImage(img, 0, 0, null);
```
 gemacht. aber keine garantie


----------



## SlaterB (21. Mrz 2006)

interessant ist ja dabei ob das Bild vielleicht null ist..,
vor das drawImage() eine Zeile 
System.out.println("Image: "+img); 
setzen

evtl. fehlt die Datei oder ist in einem falschen Verzeichnis,
das kann durchaus davon abhängen von wo aus das Programm gestartet wird,

wo liegt das Jpg denn im Dateisystem? wo liegt die .class-Datei?

was kommt raus bei den Operationen:
File x = new File("test");
System.out.println(x.getAbsolutePath());

(-> mit welchen Verzeichnis arbeitet das Programm?)

-----------

g = getGraphics();

klingt ja auch ziemlich übel, vielleicht ist dieses null, zu testen per:
System.out.println("Graphics: "+g); 

normalerweise stehen solche Zeichen-Operationen doch in
public void paint(Graphics g) {
  g.drawImage(..);
}

das soll ja normalerweise auch bei jedem Neuzeichnen gezeichnet werden und nicht nur beim einmaligen Einlesen des Bildes,
falls du nicht 100% Bescheid weißt über Zeichnen in Jave dann versuch doch erstmal einfache Kreise oder Rechtecke zu malen und nicht komplizierte Bilder

so wirfst du ja mehrere Fehlerquellen zusammen..


----------



## Stiewen (21. Mrz 2006)

Aloa und danke schon mal

hab beides versucht, aber:
1. mit null hinten funzt auch net anders
2. wenn img null wäre, würde das nicht zur nullpointerexception führen, sondern das bild würde nicht angezeigt werden, wenn er es net findet.
3. paint is auch nur eine Methode. diese wird beim starten aufgerufen und bekommt dabei das graphics g übergeben ... so wie man auch sonst Variablen überreicht. Heißt: man kann sich auch einfach dieses Objekt erzeugen, so wie ich es getan hab ...

so... aber mal wieder zurück: noch jemand eine Idee, was ich vll doch noch falsch machte? 
Ziel soll sein ein einzelnes Fenster mit einem einzigen jlabel anzuzeigen, was einen Hintergrund hat

THX Stiewen


----------



## MPW (21. Mrz 2006)

Also, ich wuerde das einfach so machen:


```
JFrame jf = new JFrame("ImageViewer");
ImageIcon ii = new ImageIcon("SignedOn.jpg"));
jf.add(new JLabel(ii));
jf.pack();
jf.setVisible(true);
```

...und man hat keinen Aerger mehr...


----------



## Stiewen (21. Mrz 2006)

Priob is aber, dass ÜBER das bild noch ein Text soll ...
heißt: man müsste den hintergrund des Frames das Bild zuweisen und dann den Label rüber ...

oder wie sonst?


----------



## MPW (22. Mrz 2006)

Da gibt es dutzende alternativen, z.B. GlassPane oder sowas...


----------



## L-ectron-X (23. Mrz 2006)

Wenn dein Label bereits ein Icon anzeigt, kann der Text mit der Methode
http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JLabel.html#setIconTextGap(int)
über das Icon gezeichnet werden.
Wenn die Methode negative Werte übergeben bekommt, rutschen die Labeltexte nach links, bei positiven nach rechts.


----------

