# JFrame Background



## tinmi (12. Feb 2017)

Hallo Leute!

Ich programmiere im moment an dem Spiel PacMan.
Leider stehe ich nur vor einen Problem.
Ich möchte den FrameBackground gerne auf schwarz setzen, leider funktioniert es nicht.

Hier ein Ausschnitt aus dem Code:


```
public void onGo(){
        canvas = new Canvas();
       
        JFrame frame = new JFrame();//neuer frame wird erstellt
        frame.setSize(600, 600);//frame hat eine größe von 600x600
        frame.setResizable(false);
        frame.getContentPane().setBackground(Color.red);
        frame.setTitle("PACMAN");//frametitle wird gesetzt
        frame.addKeyListener(this);//keylistener inplementieren
        frame.getContentPane().add(canvas);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//das spiel wird mit klick auf (X) beendet
        frame.setVisible(true); //der frame wird sichtbar gemacht
       
        //gameloop
        gameloop();
    }
```

Ich hoffe ihr könnt mir helfen.

Lg
tinmi


----------



## Thallius (12. Feb 2017)

Funktioniert nicht ist eine ziemlich schlechte Fehlerbeschreibung. Weiterhin kann er kaum schwarz werden wenn du Color.red schreibst...


----------



## tinmi (12. Feb 2017)

Hallo Thallius,

funktioniert nicht, ist eine relativ gut Beschreibung, da sich die Farbe nicht ändert.
Color.red ist wohl ein kleiner Tippfehler.

LG
tinmi


----------



## Thallius (12. Feb 2017)

Dann würde ich vorschlagen du setzt ein Panel in das Frame und gibst dem die Hintergrundfarbe.


----------



## Blender3D (12. Feb 2017)

Ich habe bereits einen fertigen Pacclone in pure Java realisiert und eine kleine Game engine dafür realisiert.
Deshalb möchte ich dir eine Tip geben.
Du solltest in deiner Swing Zeichenfunktion nur ein Bitmap zeichnen. --> Hintergründe, Sprites Punkte etc.
Zeichnest Du in Deinen Gameloop ( Runable) in diese Bitmap. Wenn ein Frame fertig ist zeichnest Du diese in Deiner Swingmethode.
Bei mir ist das Ein JPanel der periodisch diese Funktion aufruft.

```
public void paintScreen() {
        // use active rendering to put the buffered image on-screen
        Graphics g;
        try {
            g = this.getGraphics();
            if ((g != null) && (dbImage != null))
                g.drawImage(dbImage, 0, 0, null);
            // Sync the display on some systems.
            // (on Linux, this fixes event queue problems)
            Toolkit.getDefaultToolkit().sync();
            g.dispose();
        } catch (Exception e) { // quite commonly seen at applet destruction
            System.err.println("Graphics error: " + e);
        }
    }
```
Um gute Frameraten zu erhalten must Du Dein Runable trickreich gestalten.
Meine Buchempfehlung dazu:
http://shop.oreilly.com/product/9780596007300.do


----------



## tinmi (14. Feb 2017)

Danke!

Habe das Problem nun gelöst.

Lg
tinmi


----------

