CSCI A201/A597 and I210

Lecture Notes Twenty-Seven

Second semester 2000-2001


Applets.
We investigate how paint works.

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

public class One extends Applet {
    int i = 0; 
    public void paint(Graphics g) {
	i += 1; 
	System.out.println("paint has been called: " + i + " times."); 
    } 
} 
And use a basic HTML file to dispatch the applet.

<html>
  <head>
    <title>All eyes on the mouse!</title>
  </head>
<body>
  <applet code=One.class height=300 width=300>

  </applet>
</body>
</html>
Now let's make paint work harder.
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class One extends Applet {
    int i = 0; 
    public void paint(Graphics g) {
	i += 1; 
	System.out.println("paint has been called: " + i + " times."); 
	int width = getWidth(), height = getHeight(); 
	for (int line = 0; line < height; line += 3) {
	    g.drawLine(0, line, width, line); // horizontal line 
	} 
    } 
} 
Now let's introduce some colors, and let's show them.
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class One extends Applet {
    int i = 0; 
    Color[] c = { Color.red    , Color.yellow, Color.blue , Color.pink, 
		  Color.magenta, Color.green , Color.black, Color.white }; 
    public void paint(Graphics g) {
	i += 1; 
	System.out.println("paint has been called: " + i + " times."); 
	int width = getWidth(), height = getHeight(); 
	int j = 0; 
	for (int line = 0; line < height; line += 3) {
	    g.setColor(c[j % c.length]); 
	    g.drawLine(0, line, width, line); 
	    j += 1; 
	} 
    } 
} 
Now let's paint in one color, but each time another one.
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class One extends Applet {
    int i = 0; 
    Color[] c = { Color.red    , Color.yellow, Color.blue , Color.pink, 
		  Color.magenta, Color.green , Color.black, Color.white }; 
    public void paint(Graphics g) {
	i += 1; 
	System.out.println("paint has been called: " + i + " times."); 
	int width = getWidth(), height = getHeight(); 

	for (int line = 0; line < height; line += 3) {
	    g.setColor(c[i % c.length]); 
	    g.drawLine(0, line, width, line); 

	} 
    } 
}
Now it is easy to prove that paint is actually optimized.

It only refreshes that part of the screen that has just become visible.

Now we add circles.

import java.awt.*; public class Circle {
    int x, y, radius; 
    public Circle(int x, int y, int radius) {
	this.x = x; this.y = y; this.radius = radius; 
    } 
    public void moveTo(int x, int y) { // x, y coordinates of center 
	this.x = x - radius; 
	this.y = y - radius; 
    } 
    public void draw(Graphics g) {
	g.drawOval(x, y, 2 * radius, 2 * radius); 
    } 
} 
And we draw them.
import java.applet.*;
import java.awt.*;

public class One extends Applet {
    Circle c = new Circle(20, 20, 10); 
    public void paint(Graphics g) {
	c.draw(g); 
    } 
} 
Now let's pay attention to mouse movement.

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

public class One extends Applet implements MouseMotionListener {
    Circle c = new Circle(20, 20, 10); 
    public void init() {
	addMouseMotionListener(this); 
    } 
    public void paint(Graphics g) {
	c.draw(g); 
    } 
    public void mouseMoved(MouseEvent e) {
	int x = e.getX(), y = e.getY();
	c.moveTo(x, y); 
	repaint(); 
    }
    public void mouseDragged(MouseEvent e) {

    }
} 
Notice that you can leave the circle behind while dragging.


Last updated: April 18, 2001 by Adrian German for A201