# Graphics2D: altes Objekt löschen, wenn repaint aufgerufen wird



## edshirt (8. Jun 2009)

Hallo,

ich habe auf einem JPanel einen Kreis gezeichnet, der halbtransparent ist. Wenn ich den Kreis das erste Mal anklicke, soll ein .gif draufgelegt werden. Wenn man den Kreis nochmal anklickt, soll das Bild wieder verschwinden. Das klappt soweit auch.

Jetzt habe ich das Problem, das wenn ich ein zweites Mal auf den Kreis klicke man den vorherigen Kreis noch darunter sieht. Gibt es eine Möglichkeit, die Graphic erst einmal zu "löschen" und dann neu zu zeichnen. Ich habe es mit clearRect() versucht, nur dann erhale ich einen weißen Kasten im Hintergrund. Das ganze einmal mit transparenter Farbe zu füllen klappt natürlich auch nicht.

Hat jemand eine Idee?


----------



## Marco13 (8. Jun 2009)

Alles, was gezeichnet wird, sollte NUR in der paintComponent-Methode gezeichnet werden. Wenn du sie richtig überschrieben hast

```
public void paintComponent(Graphics g)
{
    super.paintComponent(g); // Wichtich!
    drawYourOwnStuff(g);
}
```
fängst du bei jedem Zeichnen quasi "bei 0 an", d.h. du kannst dir vollkommen frei aussuchen, was nicht gezeichnet werden soll. (Und es wird erstaunlich viel nicht gezeichnet.... Bei einem Bildschirm der Größe 1024x768 bei jedem Zeichendurchgang immerhin ca. 10^6200000 Bilder... :shock: )


----------



## edshirt (8. Jun 2009)

das mache ich, nur komischerweise macht er das trotzdem.
Hier mal der Quellcode.


```
@Override
        public void paintComponent(Graphics g)
        {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g;
            g2d.setColor(new Color(255,0,0,200));
            g2d.fillOval(0, 0, 30, 30);
            if(angeklickt)
            {
                if(spielerMussAngreifen)
                {
                    g2d.drawImage(angreifenIcon, null, 7, 7);
                }
                else if(spielerMussVerschieben)
                {
                    g2d.drawImage(verschiebeIcon, null, 7, 7);
                }

                g2d.setColor(Color.WHITE);
                g2d.drawString("12", 9, 20);
            }
            else
            {
                g2d.setColor(Color.BLACK);
                g2d.drawString("12", 9, 20);
            }
        }
```


----------



## Marco13 (8. Jun 2009)

Kannst du ein KSKB posten? Ist immer lästig wenn man 10 Fragen am Tag beantworten .. will.. oder würde... und 10 mal "class TestClassNumber134123 extends JFrame { public static void main ..." schreiben muss


----------



## edshirt (8. Jun 2009)

hey ich habs rausbekommen. ich hatte das JPanel in dem ich den Kreis zeiche transparent gemacht. Wenn man es nicht transparent macht klappt es problemlos.

Trotzdem dakne für die Hilfe. Eine Frage noch für zukünftige Probleme: was ist KSKB?


----------



## Marco13 (8. Jun 2009)

Das, was erscheint, wenn du mit dem Mauszeiger kurz über dem Akronym "KSKB" stehenbleibst


----------



## Verjigorm (8. Jun 2009)

*kopfschüttel*

Sowas sticht doch ultimativ ins Auge, dafür sind so Feature da im Forum ...


----------



## edshirt (9. Jun 2009)

Man lernt nie aus...


----------

