Verständinsfrage

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
hy, ich habe hier ein kleines programm:

Code:
import java.awt.*;
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class FlagMaker extends Frame{
  FlagMaker(){
    add("Center",new Flag());

    //Sorge dafür, dass das Programm beim Schliessen des Fensters endet:
    addWindowListener(new WindowAdapter(){
      public void windowClosing(WindowEvent e){
        System.exit(1);
      }
    });
    setTitle("Flagge");
    setSize(300,200);
    setVisible(true);

  }
  public static void main(String[] args){
    new FlagMaker();
    
  }
}

class Flag extends Canvas{
  
    public void paint(Graphics g){
    //Zeichne eine Flagge mit farbigen Rechtecken:
    
    g.setColor(Color.BLUE);
    g.fillRect(40,40,60,100);
    g.setColor(Color.WHITE);
    g.fillRect(100,40,60,100);
    g.setColor(Color.YELLOW);
    g.fillRect(160,40,60,100);

    g.setColor(Color.BLACK);
    g.drawString("Nederlande",100,180);
  }
}

nun, dieser code zeichnet mir eine flagge mit drei rechtecken. was ich nun nicht ganz verstehe, ist, wesshalb diese Methode paint() der Klasse Flag automatisch aufgerufen wird, obwohl ich ja oben nur sage new Flag() .
die klasse Flag überschreibt die Methode paint der Klasse Canvas.
was passiert nun genau, wenn ich in der Klasse FlagMaker new Flag() sage?

vielen dank
grüsse sebi
 

Marce

Mitglied
Also im Java Hanbuch sollte das Beschrieben stehen und "Java ist auch eine Insel" ist ebenfalls zu empfehlen.

wenn du etwas auf einen Frame addest wird das Objekt immer ge-repainted (gräßliches Deutsch *g*)

Zitat aus "Java ist auch eine Insel":
Als einleitendes Beispiel soll uns genügen, einen Text zu platzieren. Dazu implementieren wir die Funktion paint() der Frame-Klasse. Die Component-Klasse definiert update() abstrakt. Indem wir sie implementieren, wird der gewünschte Inhalt immer dann gezeichnet, wenn das Fenster neu aufgebaut wird, oder wir von außen repaint() oder update() aufrufen.
 

Illuvatar

Top Contributor
Jo, das is dann der sog. Gui-Dispatch-Thread. Der ruft immer, wenn etwas verdeckt wurde, neu auf den Bildschirm kommt oder dies angefordert hat die paint bzw. die update Methode auf.

@Marce: Wenn dann regepainted ;)
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben