5. Standard-methods in the applet

So far, every applet we have seen had a method paint. We saw that the paint method does all the drawing in the applet. This method will not only run when the applet is started, but also every time the applet window is changed.

In the following applet (HowOftenDoesPaintRun) the variable inPaint is used to keep tabs of the number of times paint actually runs. Just compile the following applet and start it in Appletviewer, and then change the size of the applet window. Every time a change takes place, inPaint is increased by 1. As we saw before, the following two statements are identical:

inPaint++;                    // The value of inPaint
inPaint = inPaint + 1;   // is increased by 1.
Also minimizing and maximizing the window will increase inPaint.

You can also see that a long statement (with drawString, in the 8th and 9th lines) can be broken up into several lines. Hopefully, the program will need no further explanation.
// When does the method paint run?
import java.applet.*;
import java.awt.*;
public class HowOftenDoesPaintRun extends Applet {
    int inPaint = 0;
    public void paint (Graphics g) {
        inPaint++;
        g.drawString ("Paint has run " + inPaint
                                + " times.", 30, 100);
    }
}

There are other methods which are automatically invoked in the life of an applet. They are:
  • init()       called once at the start of the applet
  • start()     called at every start or restart of the applet
  • stop()     called when the applet is stopped (also temporarily)
  • paint()    called when the applet window is (re)painted
  • destroy()called only once when the applet is finished
No matter where we place these methods, they are always invoked by the events described above. In the following program (which doesn't really do anything useful) you see these five methods. In the methods a counter will be increased by 10000, 1000, 100, 10 en 1. In that way the separate digits of the counter will show us which method has run and how often.
import java.applet.*;
import java.awt.*;
public class InitStartEtc extends Applet {
int counter=0;

public void init() {
    counter += 10000;
}

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

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

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

This applet has one problem: if any counter exceeds the value 9, the applet does not work correctly any more.

Global and local variables
If you declare a variable in the beginning of the applet (outiside the methods, also called: globally), its value will be known in every part of the applet. In this program the variable counter is declared globally, so its value can be changed by each of the methods in the applets.

If you use a variable in only one method, you should declare it in that method only (locally). In that way you make it easier to reuse the method in other programs.

An added advantage is that you avoid the risk of unintentionally changing the value of another variable, which accidentally has the same name.

Exercise 5.1
Make an applet with the methods discussed above (init(), start() etc.) When any of these methods runs, the applet should add the name of the method that has run to the end of that string, and drawString should show this string, so that we can see which methods have run. Strings can easily be extended by means of the plus-operator, for instance like this:
String firstpart = "Shake";
String lastpart = "speare";
String name = firstpart + lastpart;

By the way, do you think it will be possible to show in this way that destroy has run?


chapter 6

Main Menu Java Tutorial

To home page

(c) 2005, Thomas J.H. Luif