5. Enkele standaard-methoden in de applet

In elke applet die we tot dusver bekeken hebben, zagen we de methode paint. We hebben gezien dat de methode paint het tekenwerk doet in de applet. Deze methode gaat niet alleen lopen bij de start van de applet, maar bij elke verandering die het appletvenster ondergaat.

In de volgende applet (HoeVaakLooptPaint) houden we met de variabele inPaint bij hoe vaak de methode paint wordt doorlopen. Start de volgende applet maar eens met Appletviewer, en verklein en vergroot het appletvenster. Telkens wordt inPaint met 1 verhoogd. Het is in dit verband goed om te weten dat de volgende twee statements identiek zijn:

inPaint++;            // De waarde van inPaint
inPaint = inPaint + 1;// wordt met 1 verhoogd.

Ook minimaliseren en maximaliseren van het venster verhoogt inPaint.

Er is trouwens ook te zien dat een lang statement (bij drawString) probleemloos op de volgende regel kan worden vervolgd. Het programma spreekt verder hopelijk voor zich.

// Wanneer loopt de methode paint?
import java.applet.*;
import java.awt.*;
public class HoeVaakLooptPaint extends Applet {
   int inPaint = 0;
   public void paint (Graphics g) {
      inPaint++;
      g.drawString ("Paint heeft " + inPaint
         + " maal gelopen.", 30, 100);
   }
}

De methoden die automatisch in een bepaald stadium van het leven van de applet worden aangeroepen zijn:

  • init()   eenmalig aangeroepen bij het starten van de applet

  • start()  aangeroepen bij elk (her)starten van de applet

  • stop()   aangeroepen als applet (ook tijdelijk) wordt verlaten

  • paint()  aangeroepen bij elke verandering van het appletvenster

  • destroy()eenmalig aangeroepen bij het einde van de applet

Het maakt niet uit waar we deze methoden plaatsen, ze worden altijd uitgevoerd op het hierboven beschreven moment. In het volgende programma (dat verder niets zinnigs doet) komen al deze methoden voor. We verhogen in deze methoden een teller met respectievelijk: 10000, 1000, 100, 10 en 1. Op deze manier laten de afzonderlijke digits van de teller ons zien welke methode hoe vaak doorlopen is.

import java.applet.*;
import java.awt.*;
public class InitStartEtc extends Applet {

int teller=0;
public void init() {
   teller += 10000;
}

public void start() {
   teller += 1000;
}

public void stop() {
    teller += 100;
}

public void paint (Graphics g) {
   teller += 10;
   g.drawString ("" + teller, 40, 30);
   g.drawString ("Op positie 1: init", 40, 85);
   g.drawString ("Op positie 2: start", 40, 120);
   g.drawString ("Op positie 3: stop", 40, 155);
   g.drawString ("Op positie 4: paint", 40, 190);
   g.drawString ("Op positie 5: destroy",40,225);
}

public void destroy() {
   teller += 1;
}

}

Als je een variabele meteen in het begin van de applet (globaal) declareert, is zijn waarde overal in de applet bekend en kan ook overal veranderd worden. In het programma is de variabele teller globaal gedeclareerd, zodat zijn waarde in alle methoden bekend is (en veranderd kan worden).

Wordt een variabele slechts in één methode gebruikt, dan moet je hem alleen in die methode declareren. Op die manier is zo'n methode zelfstandig en kun je hem eventueel ook in andere programma's gebruiken. je hoeft dan niet bang te zijn dat zijn interne variabelen per ongeluk veranderd worden.

Met globale variabelen loop je makkelijk het risico dat een variabele die toevallig dezelfde naam heeft, onbedoeld van waarde verandert.

Opdracht 5.1

Maak een applet met genoemde methoden init(), start() enz. Laat telkens als een van deze methoden 'gelopen' heeft, een string verlengen met de naam van de methode die het laatst gelopen heeft. Laat deze string telkens door drawString afbeelden, zodat we kunnen nagaan welke methode gelopen heeft. Denk je dat het mogelijk is om op deze manier de methode destroy() zichtbaar te maken?

   

(c) 2003-2008, Thomas J.H.Luif