Im ersten Code überschreibst Du die paint von JFrame (würde ich lassen) und lädtst das Bild in der paint (ist zu unterlassen ;-))
Im zweiten Code steckst Du das Bild auf ein JLabel, welches nirgends verbaut ist.
Beides wird Dich nicht unbedingt zum Ziel führen.
Bei einer Suche im Internet sollte man eigentlich unzählige Beispiele finden. z.B: Creating Frames with a background image : JFrame WindowSwingJava Tutorial
Ersteres kann nicht funktionieren, da eine Methode (bzw. der Konstruktor) keine "Untermethode" enthalten kann. Zweiteres funktioniert nicht, da das JLabel ja zu keinen Container (JFrame/Contentpane) hinzugefügt wird.
Ich würde dir empfehlen, ein JLayeredPane zu nehmen und dem ContentPane hinzuzufügen. Das hat die Möglichkeit sehr viele Panels zu beinhalten. Damit kannst du den Background an die unterste Ebene hinzufügen, damit er später den anderen Komponenten nicht im Weg ist, wenn sie z. B. Ebenen wechseln müssen.
wenn ich den Pfad durch meinen ersetze bekomme ich den Fehler:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(Unknown Source)
at spiel.ImageDemo.<init>(ImageDemo.java:16)
at spiel.ImageDemo$1.run(ImageDemo.java:39)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
ich gehe mal davon aus das er mein Bild nicht findet oder?
Damit kannst du den Background an die unterste Ebene hinzufügen, damit er später den anderen Komponenten nicht im Weg ist, wenn sie z. B. Ebenen wechseln müssen.
Eigentlich sollten auf diesem Hintergrund (erstmal) nichts anderes sein als das Bild
werde das trotzdem mal ausprobieren (ist das nicht dasselbe wie im vom Post von André Uhres ?)
Am Besten ist, du gibts es direkt ins Projektverzeichnis, wenn du Eclipse verwendest wäre das der Ordner, in dem die Ordner src und bin liegen. Dort kannst du es relativ per new ImageIcon("") laden. Oder per getRessource aus den bin-Ordner, dafür muss der Pfad aber mit / beginnen. Also "/sterne.png".
Die Erste Möglichkeit läd bei einer jar dann die Dateien aus dem selben Ordner wie die jar, die Zweite direkt aus der jar.
Dort kannst du es relativ per new ImageIcon("") laden. Oder per getRessource aus den bin-Ordner, dafür muss der Pfad aber mit / beginnen. Also "/sterne.png".
Ich weiß, blöde Frage, aber passiert mir oft: Bist du sicher, dass es ein jpg ist, und du es nicht nur z. B. in Paint gezeichnet aber als bmp unter *.jpg abgespeichert hast?
oh sorry hatte da noch nen tippfehler übersehen
zwei buchstaben vertauscht
ginbts da noch ne möglichkeit das Bild mit der Größe des Fenster zu verändern?
So dass es zB bei Vollbild auch das ganze Bild ausfüllt und nich nur die fläche der usprünglichen Auflösung?
Gibt es. In diesen Fall würde ich das Bild einfach strecken, wenn sich die Größe ändert. Einen anderen Weg kenne ich nicht. Dazu würde ich einen ComponentListener registrieren, der hat die Methode componentResized. Das ganze sähe dann wohl so aus:
Du kannst auch einfach die Klasse BackgroundPanel benutzen, die macht zusätzlich alle Komponenten durchsichtig, die ihm hinzugefügt werden (wir wollen ja nicht, dass etwa ein undurchsichtiges Panel das tolle Bild versteckt ). Die Klasse BackgroundPanel findest du hier: Background Panel Java Tips Weblog
ich wollte gerade mal ausprobieren wie man eine .jar Datei erstellt.
Das hat auch halbwegs funktioniert; das heißt alle Button und so sind da.
Nur der Hintergrund ist weg ;(
Habe ihn bis jetzt so geladen, da er ja direkt im Projekt Ordner lag:
Das ist ein relativer Pfad.
Ich habe hier zwar nicht Eclipse, aber ich würde sagen im src Ordner. Dort kannst du sicher auch ein package anlegen, etwa demo. Dieses package (=Unterverzeichnis von scr) sollte dann dein Bild und den Quellcode deiner Klasse (z.B. HauptmenueHintergrund.java) enthalten: