warum passiert das?

aevo

Grünschnabel
hi ich bin beim durcharbeiten eines Tutorials auf diese Beispiel gestossen, da hab ich eine frage: ich verstehe nicht wieso beim ausführen der klasse die methode paint gleich mit aufgerufen wird. Sollte nicht eigendlich die methode erst unter z.b. main aufgerufen werden?

danke schonmal

Code:
package pack;

import java.awt.*;
import java.awt.event.*;

public class Example1401 extends Frame
{
   public static void main(String[] args)
   {
      Example1401 wnd = new Example1401();
   }

   public Example1401() // Konstruktor
   {
      super("Grafikbeispiel");
      addWindowListener(
         new WindowAdapter() {
            public void windowClosing(WindowEvent event)
            {
               System.exit(0);
            }
         }
      );
      setBackground(Color.lightGray);
      setSize(300,200);
      setVisible(true);
   }

   public void paint(Graphics g)
   {
      int i;
      int x = 80;

      for (i=0; i<60; ++i) {
         g.drawLine(x,40,x,100);
         x += 1+3*Math.random();
      }
   }
}
 
Hi.

Da diese Klasse von der Klasse Frame abgeleitet ist, passiert beim Aufruf des Konstruktors der Super-/Oberklasse noch eine ganze Menge mehr. Unter anderem wird die Grafiksystem initialisiert und dann auch ausgeführt (mit der setVisible() Methode) und die zeichnet dann auch ein Fenster und dessen Inhalt (indem es die paint() Methode aufruft).

Gruß
 
Bedeutet das, die Klasse frame auch schon eine Methode paint besitzt? Wenn die methode anders heißen würde, würde sie dann nicht mit aufgerufen werden? Und kann man das aufrufen der Methode verhindern, wenn ich beispielsweise sage ich will das erst nach einem bestimmten Ereignis die Methode aufgerufen wird.
 
Bedeutet das, die Klasse frame auch schon eine Methode paint besitzt? Wenn die methode anders heißen würde, würde sie dann nicht mit aufgerufen werden?
Exakt.

Und kann man das aufrufen der Methode verhindern, wenn ich beispielsweise sage ich will das erst nach einem bestimmten Ereignis die Methode aufgerufen wird.
Solche Logik muss eben in die paint-Methode - darin bestimmst Du, was wann wie gezeichnet wird.

Java:
   public void paint(Graphics g)
   {
      int i;
      int x = 80;

      if (somethingHasHappened)
          g.setColor(Color.RED);
      else
          g.setColor(Color.BLACK);

      for (i=0; i<60; ++i) {
         g.drawLine(x,40,x,100);
         x += 1+3*Math.random();
      }
   }
 
Bedeutet das, die Klasse frame auch schon eine Methode paint besitzt?
Ja. Die Klasse Frame erbt von der Klasse Container die paint() Methode. Siehe http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Frame.html
Wenn die methode anders heißen würde, würde sie dann nicht mit aufgerufen werden?
Ja.
Und kann man das aufrufen der Methode verhindern, wenn ich beispielsweise sage ich will das erst nach einem bestimmten Ereignis die Methode aufgerufen wird.
Nein. Die Methode wird zum Zeichnen des Fensterinhalts immer aufgerufen. Wenn dann mußt du deinen Code in eine andere Methode schreiben. Du könntest z.B. das MouseListener Interface implementieren und deinen Code in die mouseClicked() Methode einfügen. Dann registrierst du deine Klasse mit der addMouseListener() Methode.

Gruß
 
Zurück