Tutorials : Java by Example : Section 7 :
Section Seven Contents
Fun With Letters and Words
Rotating Lines and Polygons
Sorting and Shuffling

Letters - Words - Lines - Shuffle

Rotating Lines and Polygons - Analog Clock

With the knowledge we have gained now, it is not very difficult to make a real analog clock with hands, like this one here. Note that Java doesn't allow to specify a pen with more than 1 pixel width, so you would have to draw several parallel lines in order to increase the width of the clock hands.

//Sourcecode

import java.awt.*;
import java.applet.*;
import java.util.*;

public class Project41 extends Applet implements Runnable
{
    Thread runner;
    Image Buffer;
    Graphics gBuffer;
    int angle;

    public void init()
    {
        Buffer=createImage(size().width,size().height);
        gBuffer=Buffer.getGraphics();
    }

    public void start()
    {
        if (runner == null)
        {
            runner = new Thread (this);
            runner.start();
        }
    }

    public void stop()
    {
        if (runner != null)
        {
            runner.stop();
            runner = null;
        }
    }

    public void run()
    {
        while(true)
        {
            try {runner.sleep(100);}
            catch (Exception e) { }

            repaint();
        }
    }

    void drawStuff()
    {
        //paint background black
        gBuffer.setColor(Color.black);
        gBuffer.fillRect(0,0,size().width,size().height);

        //get the center of the applet
        Point p=new Point(size().width/2, size().height/2);

        //define the hand lengths
        int S_LENGTH=85, M_LENGTH=80, H_LENGTH=60;

        Date d=new Date();
        int sec=d.getSeconds();
        int min=d.getMinutes();
        int hour=d.getHours();

        //calculate the vectors, using the constant Pi
        double vs = sec * Math.PI*2 / 60.0;
        double vm = min * Math.PI*2 / 60.0;
        double vh = hour * Math.PI*2 / 12.0 + vm / 12.0;

        int sx=(int)(p.x+S_LENGTH*Math.sin(vs));
        int sy=(int)(p.y-S_LENGTH*Math.cos(vs));

        int mx=(int)(p.x+M_LENGTH*Math.sin(vm));
        int my=(int)(p.y-M_LENGTH*Math.cos(vm));

        int hx=(int)(p.x+H_LENGTH*Math.sin(vh));
        int hy=(int)(p.y-H_LENGTH*Math.cos(vh));

        //the second hand
        gBuffer.setColor(Color.yellow);
        gBuffer.drawLine(p.x, p.y, sx, sy);

        //the minute hand
        gBuffer.setColor(Color.red);
        gBuffer.drawLine(p.x, p.y, mx, my);

        //the hour hand
        gBuffer.setColor(Color.green);
        gBuffer.drawLine(p.x, p.y, hx, hy);

        //the face and axis
        gBuffer.setColor(Color.blue);
        gBuffer.fillOval(p.x-6,p.y-6,12,12);
        gBuffer.drawOval(p.x-90,p.y-90,180,180);
    }

    public void update(Graphics g)
    {
        paint(g);
    }

    public void paint(Graphics g)
    {
        drawStuff();
        g.drawImage (Buffer,0,0, this);
    }
}

How to Add Java Applets to Your Site

New on the Java Boutique:

New Review:

Time Management Made Easy with the Quartz Enterprise Job Scheduler
Why not just use the Java timer API? This open source scheduling API boasts simplicity, ease-of-integration, a well-rounded feature set, and it's free!

New Applet:

Reverse Complement
Reverse Complement is a simple applet that converts DNA or RNA sequences into three useful formats.

Elsewhere on internet.com:

WebDeveloper Java
Lots of Java information on webdeveloper.com

WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.

ScriptSearch Java
Hundreds of free Java code files to download.

jGuru: Your View of the Java Universe
Customizable portal with online training, FAQs, regular news updates, and tutorials.