Hintergrundbild in JFrame
-
Hi,
ich bin total gefrustet jetzt versuch ich schon seit zwei
Tagen auf ein JFrame ein Hintergrundbild zu legen auf dem dann
wiederum ein Button liegt.
Im Netz hab ich Vorschläge mit JLayerdPane gefunden ich brings aber nicht
auf die Reihe **gruml**.
Kann mir vielleicht jemand ein kurzes Beispiel dazu Posten.THX Alex
-
Wenn du ein Hintergrundbild in einem JFrame haben willst, dann schreibst du dir am besten eine eigene Klasse, die aus JPanel abgeleitet ist. In dieser zeichnest du in paintComponent das Bild.
Nun kannst du in deinem JFrame gleich nachdem du ihn erstellt hast sagen:myJFrame.setContentPane(new myBGPanel());
So mal die grobe Zusammenfassung. Wenn du dich nicht auskennst, dann schreib hier nochmal.
-
Also habs mal so versucht:
public class MyBGPanel extends JPanel {
private Image img;
public MyBGPanel() {
JPanel jp = new JPanel();
img = getToolkit().getImage("bild.jpg");
MediaTracker mt = new MediaTracker(this);mt.addImage(img, 0);
try {
//Warten, bis das Image vollständig geladen ist,
//damit getWidth() und getHeight() funktionieren
mt.waitForAll();
} catch (InterruptedException e) {
//nothing
}
}public void paint(Graphics g) {
g.drawImage(img, 1, 1, this);
}
}##############################################################################
public class Frame extends JFrame{
public Frame(){
this.setSize(100,100);
}
public static void main(String[] ars){
Frame f = new Frame();
f.setContentPane(new MyBGPanel());
}}
aber es kommt ein Fehler bei "f.setContentPane" das geht nicht.
Cu Alex
-
1.) Bitte verwende Code-Tags, dmit es etwas übersichtlicher wird.
2.)public class MyBGPanel extends JPanel { private Image img; public MyBGPanel() { JPanel jp = new JPanel();
Die letzte Zeile solltest du durch super(); ersetzen. Dadurch wird kein neues Objekt erzeugt. MyBGPanel ist ja schon von JPanel abgeleitet.
3.) public void paint(Graphics g) { - In Swing sollte _nur_ paintComponent verwendet werden. Einfach umbenennen.
4.)public class Frame extends JFrame
Du solltest nicht Frame als Klassennamen verwenden, weil es bereits eine Klasse gibt, die so heißt.
5.) Das mit dem setContentPane wäre besser im Konstruktor der Klasse:public Frame(){ setSize(100,100); setContentPane(new MyBGPanel()); setVisible(true); }
6.) Zu deinem Fehler:
Frame f = new Frame(); f.setContentPane(new MyBGPanel());
Hier kommt ein Fehler, weil du deine Klasse Frame genannt hast. Ich nehme mal an, dass du auch java.awt importierst. Du erstellst hiermit also einen java.awt.Frame und dieses Objekt besitzt keine Methode setContentPane -> Also einfach Klasse umbenennen.
[ Dieser Beitrag wurde am 25.05.2003 um 16:57 Uhr von destruct0r editiert. ]
-
Super geil dank dir echt gute hilfe.
Ich war schon total angenervt wegen dem scheiß.
-
Noch ne Frage ich will das ganze jetzt auf einem
Panel machen hat jemand da ne Idee??
-
Was heiß denn da hat hier jemand eine Idee? Du hast das ganze ja schon als Panel.
Wenn du nun irgendwo das Panel einfügen willst, dann mach einach my1stPanel.add(new myBGPanel()); und schon geht's. Wenn du aber beabsichtists mehrere verschiedene Hintergrundbilder zu verwenden, dann solltest du den Konstruktor von MyBGPanel um einen Parameter erweitern...