Thorsten F.: Repaint()

Hi,

ich habe ein JFrame und darin ein JPanel. In diesem JPanel wird ein Bild dargestellt.

Nun habe ich anhand von x-y-Koordinaten das Bild lokalisiert. Wenn ich auf das Bild klicke (mousePressed), dann wird ein Counter um 1 erhöht und am Schluss von mousePressed mache ich einen Repaint.

In meiner Paint-Methode zeichne ich das Bild in Abhängigkeit von dem Counter.
Wenn der Counter%2=0, dann zeichne Bild1, ansonsten Bild2.

Den Counter lass ich mir sowohl in der Fkt. mousePressed als auch in der Fkt. paint() ausgeben, als Debug sozusagen. Der ist auch in beiden Fkt. gleich und er wird auch bei jedem mousePressed um 1 erhöht.

Nun, der repaint() funktioniert genau 1Mal, aber dann nicht mehr.
Die Fkt. laufen eigentlich richtig, da, wenn ich das Fenster minimiere und dann wieder maximiere, das andere Bild angezeigt wird.

Was mach ich falsch?

Grüße,
Thorsten F.

  1. Ok,
    hat sich erledigt. Habe in die paint() Folgendes hingeschrieben:
    super.paint(g);

    Kann mir mal einer sagen warum das hilft?

    Grüße,
    Thorsten F.

  2. Hi,

    anderes Problem. Das mit dem Bildwechsel habe ich soweit hinbekommen, allerdings stellt sich nun ein neues Problem:

    Für ein (gemeint ist die Menge) Bild habe ich das bis jetzt so gemacht:

    Paint():

    if(right_counter==0)
      {
       g.drawImage(rechts,100,100,29,8,this);
      }
      else if(right_counter==1)
      { g.drawImage(rechts_on,100,100,29,8,this);
      }
      else if(right_counter==2)
      {
       g.drawImage(links,100,100,29,8,this);
      }
      else if(right_counter==3)
      {
       g.drawImage(links_on,100,100,29,8,this);
      }

    MousePressed:

    int x = e.getX();
       int y = e.getY();
       if(debug==true) System.out.println("X: "+x+" und Y: " +y);

    if( (x>=100 && x<=130 ) && (y>=100 && y<=110) )
       {
        if(right_counter==3)
         right_counter=-1;
        right_counter++;
        repaint();
        if(debug==true) System.out.println("Counter nach Repaint(): " +right_counter);

    }

    Wenn ich das jetzt aber mit mehreren Bilder machen möchte, dann wird das sehr aufwendig, denn bis jetzt müsste ich für jedes Bild, das geändert werden soll, diesen Code nochmal schreiben und auch noch neue Variablen erstellen.

    Geht das irgendwie, dass ich der MousePressed eine Variable mitgebe, die dann entscheidet, um welches Bild es sich handelt und dass dann auch nur dieses Bild geändert wird?
    Eventuell über die x-y-Koord.? Also, das ich im Endeffekt 10 Koord. habe und dann wird sich das passende Bild dazu gesucht usw.

    Oder gehts noch einfacher? Einfacher im Sinne von "reduzierter Code".

    Wäre für Anregungen und Tipps dankbar.

    Grüße,
    Thorsten F.