Applet JApplet - Verständnissproblem

corrosive

Mitglied
Hallo!

ich habe in der Uni die Aufgabe bekommen, einen Pythagorasbaum mit einem JApplet zu erstellen:

PythagorasBaum.jpg


Wie ich den Baum nun genau mache, dass will und werd ich schon alleine rausfinden.
Mein Problem ist, das ich gar nicht genau weiß, wie so ein JApplet jetzt funktioniert.
Ich habe das jetzt so verstanden, dass die init() Funktion, im Sinne der Main Klasse die Einstiegsklasse ist, die bei dem Aufrufen im Browser einmal ausgeführt wird.
Da der Baum ja rekursiv durchlaufen soll, dachte ich mir, dass ich in der init()-Methode einfach paint mit den Anfangsparametern aufrufe, dass sich dann wiederrum mit repaint() rekursiv mit neuen Parametern bis zur Abbruchbedingung aufruft. Jetzt lese ich, dass man paint() eigentlich nicht überschreiben sollte....

Wer übergibt paint() denn eigentlich das Graphics-Object? Wo wird die Methode aufgerufen?

Ich will eigentlich nur eine Methode mit gewissen Parametern aufrufen, die dann rekursiv meinen Baum zeichnet...

Code:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Polygon;
import javax.swing.JApplet;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Max
 */
public class Pythagoras extends JApplet {

   int tiefe = 7;
   int count = 0;
   double faktor = 1;
   double wL;
   double wR;
   Point a = new Point(100, 100);
   Point b;
   Point c;
   Point d;
   Point e;
   Graphics g;

   @Override
   public void init() {
      paint(g, faktor, a);
   }

   public void paint(Graphics g, double faktor, Point a) {
      setSize(400, 400);
      int w = getWidth();
      int h = getHeight();

//      g.clearRect(0, 0, w, h);

      this.a.setLocation(a.getX(), a.getY());
      b.setLocation(a.getX()+(100*faktor), a.getY());
      c.setLocation(b.getX(), b.getY()-(100*faktor));
      d.setLocation(c.getX()-(100*faktor), c.getY());
      e.setLocation(d.getX()+(50*faktor), d.getY()-(50*faktor));
      g.drawLine((int)a.getX(), (int)a.getY(), (int)b.getX(), (int)b.getY());
      g.drawLine((int)b.getX(), (int)b.getY(), (int)c.getX(), (int)c.getY());
      g.drawLine((int)c.getX(), (int)c.getY(), (int)d.getX(), (int)d.getY());
      g.drawLine((int)d.getX(), (int)d.getY(), (int)a.getX(), (int)a.getY());
      g.drawLine((int)d.getX(), (int)d.getY(), (int)e.getX(), (int)e.getY());
      g.drawLine((int)c.getX(), (int)c.getY(), (int)e.getX(), (int)e.getY());

//      int abstand = (int)Math.sqrt(Math.pow((b.getX()-a.getX()),2) + Math.pow((b.getY()-a.getY()),2));

      count++;

      if(count <= tiefe) {
         repaint(g, faktor, d);
      }

   }

   public void repaint(Graphics g, double faktor, Point a) {
       paint(g, faktor, a);
   }

}
 

Marco13

Top Contributor
paint wird sozusagen "vom Betriebssystem" (d.h. dem Fenstermanager) aufgerufen. Das passiert z.B. bei Größenänderungen des Fensters, ggf. beim Scrollen, oder wenn das Fenster kurz durch ein anderes verdeckt war. (Genaugenommen kommt der eigentliche Aufruf natürlich "von der JVM", aber in ... "enger Kooperation" mit dem Fenstermanager :D ).

Das entscheidende ist, dass man sie i.a. nicht SELBST aufrufen sollte, sondern nur dafür sorgen muss, dass alles gezeichnet wird, wenn sie (von außen) aufgerufen wird. Man könnte dafür direkt die paint-Methode des Applets überschreiben (und in vielen einfachen Beispielen wird das auch gemacht), aber es hat Vorteile (in bezug auf die Flexibilität), bei einem JApplet NICHT paint zu überschreiben, sondern stattdessen nur ein JPanel in das Applet zu legen, das das Zeichnen übernimmt. Bei so einem JPanel würde man dann allerdings die paintComponent-Methode überschreiben:
Code:
class PaintPanel extends JPanel
{
    private float irgendwelcheParameterFürDasFraktal = 1234;

    @Override
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        paintFractal(g, irgendwelcheParameterFürDasFraktal);
    }

    private void paintFractal(Graphics g, float parameter)
    {
        ...
        paintFractal(g, parameter-1); // Rekursion...
    }

}
 

corrosive

Mitglied
Danke für deine Antwort.

Aber ich muss das mit der JApplet Klasse machen, da wir nicht einfach was nehmen dürfen, was wir noch nicht hatten.

Mit welcher Methode kann ich denn den Einstieg des Applets festlegen? Wo ich ihm sage führe am Anfang z.B. zeichne() aus?
Kann ich auch in einer eigenen Methode ein Graphics.Object mit g.drawLine zeichnen lassen? Wenn ja, wofür ist dann paint()?

Versteh das alles noch nicht richtig :noe:

Grüße,
corrosive
 

Marco13

Top Contributor
Aber ich muss das mit der JApplet Klasse machen, da wir nicht einfach was nehmen dürfen, was wir noch nicht hatten.

Du hast ja ein Applet. Da liegt dann ein JPanel drin :bahnhof: Frag' vielleicht nochmal nach, kann ja nicht sein, dass es "verboten" ist, zu versuchen, das Programm flexibler zu machen. Wenn du paint überschreibst, und dann z.B. noch Buttons hinzufügen willst, kommt Murks raus...

Mit welcher Methode kann ich denn den Einstieg des Applets festlegen? Wo ich ihm sage führe am Anfang z.B. zeichne() aus?
Kann ich auch in einer eigenen Methode ein Graphics.Object mit g.drawLine zeichnen lassen? Wenn ja, wofür ist dann paint()?

Hm. Was sollte eine "zeichne()"-Methode denn machen? Alles, was gezeichnet wird, muss von der paint-Methode aus gezeichnen werden - und zwar NUR in das dort übergebene Graphics-Objekt. (Präventiv: Solche Sachen wie ein "Zwischenspeichern" eines Graphics-Objektes, oder Aufrufe von "getGraphics" führen praktisch immer zu Problemen).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J JApplet und Zeichnen AWT, Swing, JavaFX & SWT 8
J JApplet, HTML und access denied exitVM.0 AWT, Swing, JavaFX & SWT 3
B JApplet AWT, Swing, JavaFX & SWT 2
P JApplet verhält sich im Browser anders als im Eclipse (AppletViewer) AWT, Swing, JavaFX & SWT 3
P JApplet Browser Tab Öffnen AWT, Swing, JavaFX & SWT 5
H Swing JApplet - HTML - ClassNotFoundException AWT, Swing, JavaFX & SWT 7
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
B JApplet zwei Panels autobreite? AWT, Swing, JavaFX & SWT 2
F Applet JApplet per html einbinden - Main class kann nicht gefunden werden AWT, Swing, JavaFX & SWT 15
B Swing JTabbedPane in JApplet -> Reiter bei Aktualisation mehrmals zu sehen AWT, Swing, JavaFX & SWT 3
M JApplet mit Java 3D Komponente AWT, Swing, JavaFX & SWT 6
J JApplet langsam wegen vielen Tooltips? AWT, Swing, JavaFX & SWT 36
R JApplet, Elemente unsichtbar AWT, Swing, JavaFX & SWT 2
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 7
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 2
V Applet JApplet Flackern durch Repaint AWT, Swing, JavaFX & SWT 11
K JApplet Probleme AWT, Swing, JavaFX & SWT 5
S [JAVA] JFrame in Applet/JApplet AWT, Swing, JavaFX & SWT 14
H JApplet will sich nicht refreshen AWT, Swing, JavaFX & SWT 10
F OpenMap und Swing in JApplet AWT, Swing, JavaFX & SWT 8
S Applet JApplet Problem AWT, Swing, JavaFX & SWT 18
H Applet JApplet soll neues Tab im Browser öffnen AWT, Swing, JavaFX & SWT 2
G Unterschiedliche Pfadangabe zu Icons zwischen JApplet und JWindow? AWT, Swing, JavaFX & SWT 2
J Swing JApplet Designfrage AWT, Swing, JavaFX & SWT 4
J JApplet schneidet Menüleiste ab AWT, Swing, JavaFX & SWT 4
D JApplet hängt im Browser fest AWT, Swing, JavaFX & SWT 5
M JFrame in JApplet einbinden AWT, Swing, JavaFX & SWT 13
Semox Swing JApplet: Problem MouseListener Anmeldung AWT, Swing, JavaFX & SWT 3
E Bild auf JApplet AWT, Swing, JavaFX & SWT 5
Semox Swing Random Checkbox JApplet AWT, Swing, JavaFX & SWT 14
A Focus für JApplet AWT, Swing, JavaFX & SWT 7
U JPanel wechsel in JApplet AWT, Swing, JavaFX & SWT 14
J AWT JApplet lädt Bild nicht hoch AWT, Swing, JavaFX & SWT 7
R JApplet - Infos ueber Browser moeglich? AWT, Swing, JavaFX & SWT 5
V Kein Fokus für Key Bindings auf JPanel bzw JApplet AWT, Swing, JavaFX & SWT 2
S StackOverflowError bei MouseWheelListener für JApplet AWT, Swing, JavaFX & SWT 5
G JFrame in JApplet AWT, Swing, JavaFX & SWT 6
M Daten speichern mit JApplet AWT, Swing, JavaFX & SWT 9
lukas24680 JApplet und getContentPane() AWT, Swing, JavaFX & SWT 8
G paintComponent JPanel im JApplet AWT, Swing, JavaFX & SWT 2
S Alternative zu paint in JApplet AWT, Swing, JavaFX & SWT 3
R Im JFrame ein JApplet zum öffnen einer Url benutzen AWT, Swing, JavaFX & SWT 22
H JApplet fehler objekte unsichtbar. AWT, Swing, JavaFX & SWT 2
C Swing-JApplet AWT, Swing, JavaFX & SWT 3
B JDialog in JApplet AWT, Swing, JavaFX & SWT 3
P Image in JApplet geht nicht AWT, Swing, JavaFX & SWT 2
K verständnissproblem mit TableModel AWT, Swing, JavaFX & SWT 2
A Verständnissproblem bei verschiedenen GUI's AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben