Hintergrund einfügen

D

drosan

Hallo,
bin momentan dabei ein kleines Spiel zu schreiben. Jetzt möchte ich dafür gerne noch einen festen Hintergrund haben.

Hier mal ein Ausschnitt:

Code:
public void paintComponent(Graphics g)
    {
        g.fillRect(0,0,this.getWidth(),this.getHeight());
        g.setColor(new Color(255,255,255));
        g.fillRect(cx-cr, cy-cr,cl,cb);
        //g.fillRect(sx,sy-10,5,5); 
        g.fillRect(kx,ky-15,10,20);

Habe schon einige Beispiele ausprobiert, aber so richtig laufen will nix. Kann mir da jemand behilflich sein, wie ich möglichst wenig Zeilen Code noch ein Hintergrundbild reinsetze?

Grüße, drosan
 
Ganz einfach mit folgender Zeile
Java:
g.drawImage( img, 0, 0, this );

Zuvor musst Du noch Dein Bild laden, z.B. so
Java:
img = getToolkit().getImage("deinfile.png");
MediaTracker mt = new MediaTracker( this );
mt.addImage( img, 0 );
try { mt.waitForAll(); } catch( InterruptedException ex ) { }
 
Hi,
danke für die Antwort.
Leider bleibt der Hintergrund weiterhin schwarz.

Hier der code.

Code:
public class PaintPanel extends JPanel
{
*** hier sind noch weitere Variablen***
    Image img ;
    
*** Hier ist auch bissel Code****
    
    public PaintPanel()
    {
        ***Hier kommt auch was****
        img = getToolkit().getImage("x.jpg");
        MediaTracker mt = new MediaTracker( this );
        mt.addImage( img, 0 );
        try { mt.waitForAll(); } catch( InterruptedException ex ) { }
    }
... weiterer Code...


Dann halt weiter unten mit g.drawImage( img, 0, 0, this ); eingefügt. Wo steckt jetzt noch der Fehler?
 
Mehrere Möglichkeiten:
- Dein Bild wird nicht gefunden. Wird eine Exception geworden?
Java:
    public PaintPanel()
    {
        try {
          img = getToolkit().getImage("x.jpg");
          MediaTracker mt = new MediaTracker( this );
          mt.addImage( img, 0 );
        catch(Exception ex ) {
          System.out.println(ex.toString());
       }
    }

- Wo hast Du das g.drawImage genau eingefügt? Nicht, dass Du es nach dem Zeichnen noch mit fillRect überschreibst? ;)
 
Das Bild ist im selben Ordner, wo auch die java Dateien sind. Eine Fehlermeldung wird nicht ausgespuckt.
Habe es auch mit deinem Code probiert, da meckert BlueJ beim kompilieren 'catch' without 'try'. Wobei des dabei ist. oO
Das g.drawImage ist direkt als erstes in der Methode paintComponent drin.

Grüße, drosan
 
Ja, in meinem Code fehlt ein } vor dem catch. Steht in Deiner paint-Methode sonst noch was? Poste mal den ganzen Code!
 
Ah okay, die Klammer fehlte. Spuckt aber weiterhin nix aus!
Hier also der Code:

public class PaintPanel extends JPanel
{
** Hier sind nur nen paar Variablen
Image img ;

javax.swing.Timer timer;

boolean test;

Code:
public PaintPanel()
    {
        timer = new javax.swing.Timer(10, new MoveActionListener(this));
        this.addKeyListener(new ArrowKeyListener(this));
        shoots = new ArrayList<Shoot>();
        try {
          img = getToolkit().getImage("x.jpg");
          MediaTracker mt = new MediaTracker( this );
          mt.addImage( img, 0 );
        }catch(Exception ex ) {
          System.out.println(ex.toString());
       }
    }


Dann halt noch des paintComponent...


Code:
public void paintComponent(Graphics g)
    {
        g.drawImage( img, 0, 0, this );
        g.fillRect(0,0,this.getWidth(),this.getHeight());
        g.setColor(new Color(255,255,255));
        g.fillRect(cx-cr, cy-cr,cl,cb);
        //g.fillRect(sx,sy-10,5,5);
        g.fillRect(kx,ky-15,10,20);

    }
 
Wie bereits in einer Antwort vermutet: Du zeichnest das Bild und überschreibst es dann wieder mit fillRect ;) Also weg mit dem fillRect etc. oder das Bild erst nach Deinen anderen Zeichenoperationen zeichnen, abhängig vom gewünschten Effekt.
 
Zuletzt bearbeitet:
Ne ne, fillRect usw. brauch ich noch. Wird ja ein Ballerspiel. =D
Hab es jetzt ganz zum Schluß eingesetzt. Jetzt sieht man des. Danke! =)
Gibts ne Möglichkeit, die fillRects auch noch zu zeigen? Die sieht man nämlich nicht mehr... Und die wären wichtig für´s Spiel. =D
 
Das Problem liegt darin, dass Du ein fillRect über das gesamte Panel legst (getWidth(), getHeight()) und somit das zuerst gezeichnete Bild komplett überschreibst. Nochmals sag ich's jetzt aber nicht ;) Wenn Du kleine fillRects zeichnest, sieht man den Hintergrund natürlich noch.
 
Zurück