Login    New User    Forgot Password    Help      

Learn Java

Java Tutorials

Analog Clock Example

// Analog Clock
//

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

public class app10 extends Applet implements Runnable

{
Thread timer; // The thread that displays clock
int lastxs, lastys, lastxm,
lastym, lastxh, lastyh; // Dimensions used to draw hands
SimpleDateFormat formatter; // Formats the date displayed
String lastdate; // String to hold date displayed
Font clockFaceFont; // Font for number display on clock
Date currentDate; // Used to get date to display
Color handColor; // Color of main hands and dial
Color numberColor; // Color of second hand and numbers

public void init()
{
int x,y;

lastxs = lastys = lastxm = lastym = lastxh = lastyh = 0;
formatter = new SimpleDateFormat ("EEE MMM dd hh:mm:ss yyyy", Locale.getDefault());
currentDate = new Date();
lastdate = formatter.format(currentDate);
clockFaceFont = new Font("Serif", Font.PLAIN, 26);
handColor = Color.blue;
numberColor = Color.darkGray;

resize(300,300); // Set clock window size
}

// Plotpoints allows calculation to only cover 45 degrees of the circle,
// and then mirror
public void plotpoints(int x0, int y0, int x, int y, Graphics g)
{
g.drawLine(x0+x,y0+y,x0+x,y0+y);
g.drawLine(x0+y,y0+x,x0+y,y0+x);
g.drawLine(x0+y,y0-x,x0+y,y0-x);
g.drawLine(x0+x,y0-y,x0+x,y0-y);
g.drawLine(x0-x,y0-y,x0-x,y0-y);
g.drawLine(x0-y,y0-x,x0-y,y0-x);
g.drawLine(x0-y,y0+x,x0-y,y0+x);
g.drawLine(x0-x,y0+y,x0-x,y0+y);
}

// Circle is just Bresenham's algorithm for a scan converted circle
public void circle(int x0, int y0, int r, Graphics g)
{
int x,y;
float d;
x=0;
y=r;
d=5/4-r;
plotpoints(x0,y0,x,y,g);

while (y>x){
if (d<0) {
d=d+2*x+3;
x++;
}
else {
d=d+2*(x-y)+5;
x++;
y--;
}
plotpoints(x0,y0,x,y,g);
}
}

// Paint is the main part of the program
public void paint(Graphics g)
{

g.setColor(Color.black);
g.drawRoundRect(79,79,441,441,20,20);
g.setColor(Color.red);
g.fillRoundRect(80,80,440,440,20,20);
g.setColor(Color.green);
g.drawOval(99,99,400,400);
g.drawOval(100,100,400,400);
g.drawOval(101,101,399,399);
g.setColor(Color.white);
g.fillOval(101,101,398,398);
g.setColor(Color.red);
g.fillOval(290,290,20,20);
g.setColor(Color.black);

 

int xh, yh, xm, ym, xs, ys, s = 0, m = 10, h = 10, xcenter, ycenter;
String today;

currentDate = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("s",Locale.getDefault());
try {
s = Integer.parseInt(formatter.format(currentDate));
} catch (NumberFormatException n) {
s = 0;
}
formatter.applyPattern("m");
try {
m = Integer.parseInt(formatter.format(currentDate));
} catch (NumberFormatException n) {
m = 10;
}
formatter.applyPattern("h");
try {
h = Integer.parseInt(formatter.format(currentDate));
} catch (NumberFormatException n) {
h = 10;
}

formatter.applyPattern("EEE MMM dd HH:mm:ss yyyy");
today = formatter.format(currentDate);

// center point of the clock
xcenter=300;
ycenter=300;


xs = (int)(Math.cos(s * 3.14f/30 - 3.14f/2) * 145 + xcenter);
ys = (int)(Math.sin(s * 3.14f/30 - 3.14f/2) * 145 + ycenter);
xm = (int)(Math.cos(m * 3.14f/30 - 3.14f/2) * 140 + xcenter);
ym = (int)(Math.sin(m * 3.14f/30 - 3.14f/2) * 140 + ycenter);
xh = (int)(Math.cos((h*30 + m/2) * 3.14f/180 - 3.14f/2) * 115 + xcenter);
yh = (int)(Math.sin((h*30 + m/2) * 3.14f/180 - 3.14f/2) * 115 + ycenter);

// Draw the circle and numbers

g.setFont(clockFaceFont);
g.setColor(handColor);
circle(xcenter,ycenter,198,g);
g.setColor(numberColor);
g.drawString("9",xcenter-145,ycenter+13);
g.drawString("3",xcenter+140,ycenter+13);
g.drawString("12",xcenter-15,ycenter-137);
g.drawString("6",xcenter-13,ycenter+145);

// Erase if necessary, and redraw

g.setColor(getBackground());
if (xs != lastxs || ys != lastys)
{
g.drawLine(xcenter, ycenter, lastxs, lastys);
g.drawString(lastdate, 125, 50);
}

if (xm != lastxm || ym != lastym)
{
g.drawLine(xcenter, ycenter-1, lastxm, lastym);
g.drawLine(xcenter-1, ycenter, lastxm, lastym);
}
if (xh != lastxh || yh != lastyh)
{
g.drawLine(xcenter, ycenter-1, lastxh, lastyh);
g.drawLine(xcenter-1, ycenter, lastxh, lastyh); }
g.setColor(numberColor);
g.drawString("", 125, 50); //
g.drawString(today, 125, 50); //
g.drawLine(xcenter, ycenter, xs, ys);
g.setColor(handColor);
g.drawLine(xcenter, ycenter-1, xm, ym);
g.drawLine(xcenter-1, ycenter, xm, ym);
g.drawLine(xcenter, ycenter-1, xh, yh);
g.drawLine(xcenter-1, ycenter, xh, yh);

g.setColor(Color.red);
g.fillOval(290,290,20,20);

lastxs=xs; lastys=ys;
lastxm=xm; lastym=ym;
lastxh=xh; lastyh=yh;
lastdate = today;
currentDate=null;
}

public void start()
{
timer = new Thread(this);
timer.start();
}

public void stop() {
timer = null;
}

public void run() {
Thread me = Thread.currentThread();
while (timer == me)
{
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
}
repaint();
}
}

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

 

}

Output

App 10

Output in Applet

Java Tutorials