//File: BufferedHead.java import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.applet.*; public class BufferedHead extends Applet { //Surprise with an exploding balloon // Author: rachel McDermott, September 27, 1996 //Modified to be a head //Modified to use an off-screen buffer // H. J. Bernstein, 11 November 2001 public void init() { setBackground(Color.white); } public void paint (Graphics g_real) { Image image_g; Graphics g; Dimension size = getSize(); int diameter = 0, cx = size.width, cy = size.height, cmin = (int)(.8*Math.min(cx, cy)); // note: we adjust the size of the // head to leave room for the ears image_g = createImage(cx,cy); g = image_g.getGraphics(); while (diameter < cmin) { // Draw hair g.setColor(Color.red); g.fillOval(cx/2-diameter/6,(cy-diameter)/2-diameter/6, diameter/3, diameter/3); // Draw the head itself g.setColor(Color.yellow); g.fillOval((cx-diameter)/2, (cy-diameter)/2, diameter, diameter); // Draw two ears g.fillOval((cx-diameter)/2-diameter/10,cy/2-diameter/8, diameter/5,diameter/4); g.fillOval((cx+diameter)/2-diameter/10,cy/2-diameter/8, diameter/5,diameter/4); // Draw brow line and smile g.setColor(Color.blue); g.drawArc((cx-3*diameter/4)/2,(cy-3*diameter/4)/2, 3*diameter/4,3*diameter/4, 50, 80); g.drawArc((cx-3*diameter/4)/2,(cy-3*diameter/4)/2, 3*diameter/4,3*diameter/4, -50, -80); // Now draw two eyes g.setColor(Color.blue); g.drawOval((cx-3*diameter/8-diameter/5)/2,(cy-diameter/10)/2, diameter/5,diameter/10); g.fillOval((cx-3*diameter/8-diameter/10)/2,(cy-diameter/10)/2, diameter/10,diameter/10); g.drawOval((cx+3*diameter/8-diameter/5)/2,(cy-diameter/10)/2, diameter/5,diameter/10); g.fillOval((cx+3*diameter/8-diameter/10)/2,(cy-diameter/10)/2, diameter/10,diameter/10); g_real.drawImage(image_g,0,0,this); diameter++; try { Thread.sleep(20); // sleep for 20 msec } catch (InterruptedException t){} } Font current = getFont(); FontMetrics metrics = getFontMetrics (current); int ws = metrics.stringWidth("Surprise!"); int hf = metrics.getHeight(); g.setColor(Color.red); g.drawString("Surprise!", (cx-ws)/2, (cy+hf)/2); g_real.drawImage(image_g,0,0,this); try { Thread.sleep(1000); // sleep or 1 sec } catch (InterruptedException t) {} repaint(); } }