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);
}
}
|
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.