Ist wahrscheinlich schon tausendmal gefragt worden, aber entweder bin ich mit dem Code nicht zurechtgekommen oder es funktionierte nicht. Im Forum hab ich mal den Tipp gefunden, dem Panel ein Label hinzuzufügen, deshalb hier ein Code-Auszug:
Code:
public class MyApp
extends JFrame
{
/* ... */
JPanel mypanel = new JPanel( new BorderLayout() );
mypanel.setOpaque( false );
JLabel bgimage = new JLabel( new ImageIcon( "img/bg.png" ) );
mypanel.add( bgimage );
/* ... */
}
So funktioniert's aber nicht unter JDK 1.5. Gibt'S da keine fertige Anweisung in der Art "mypanel.setBackgroundImage(<bild>)"?
Wie bekomme ich es auf einfachste Weise hin, wobei hinzukommt, dass das Bild auswechselbar sein muss zur Laufzeit?
Du instanziierst dann nicht mehr ein JPanel sondern ein Objekt der Klasse PicturePanel und kannst dann aber jederzeit dein Hintergrundbild einsetzen: panel.setBackgroundImage(image);
Äh, nein. In der Klasse PicturePanel ist die Methode von dir so definiert worden:
Code:
public void setBackgroundImage(Image image) {
this.image = image;
repaint();
}
Mein Versuch, einen String als Parameter zu übergeben, scheiterte natürlich. Wie muss die Methode aussehen für einen String als Parameter, oder wie muss der Aufruf gecastet werden? ("mypanel.setBackgroundImage( (Image)"bg.jpg" );" funktioniert auch nicht.)
Danke L-ectron-X für deine Hilfe! Verwundert bin ich nur, dass es diese Methode nicht schon fertig in Java gibt. Ich bin doch nicht der einzige, der so etwas machen möchte ...
Jetzt fehlt nur noch eine Ergänzung, die das Bild auf die Größe des Panel vergrößert. Eine Idee?
Oh Mann, wenn man mit dem Kopf ständig auf die Tischplatte schlägt, weil nicht alles gleich so geht wie gedacht, vergisst man so manches (vielleicht wären Schläge auf den Hinterkopf besser ;-):
In meinem Panel wurde ein JLabel und ein weiteres Panel mit FlowLayout eingefügt. Das Bild reichte nicht ins FlowLayout, weil ich vergessen hatte, setOpaque() zu setzen:
Code:
JPanel buttons = new JPanel( new FlowLayout( FlowLayout.CENTER, 20, 20 ) );
buttons.setOpaque( false );
Schwupp, wurde das Bild im ganzen höheren Panel angezeigt ...
@L-ectron-X: Dein Spruch "Programmieren lernt man nur durch programmieren" bewahrheitet sich mal wieder.
Achso: Toolkit ist zwar ne schöne Sache, aber zum Bilder einlesen würde ich die Klasse java.imageio.ImageIO und die read()-Methode daraus benutzen. Ist aktueller und performanter.