In this program we are going to learn how we can make a clock using Java Thread. We are using the applet for graphical presentations (GUI).We are making a thread which is timer thread .This is for display the time clock. We implements the class by Runnable interface to make a thread as we know we can make thread by two ways 1.By extends Thread Class and 2.by implements Runnable interface. We are using Runnable interface because in java we can not make multiple inheritance .We are extend here Applet here for make GUI.
package org.best.examples;
import java.util.*;
import java.awt.*;
import java.applet.*;
import java.text.*;
public class Clock extends Applet implements
Runnable {
private volatile Thread timer;
// The thread that displays clock
private int lastxs, lastys, lastxm,
lastym, lastxh, lastyh;
// Dimensions used to draw hands
private SimpleDateFormat formatter;
// Formats the date displayed
private String lastdate;
// String to hold date displayed
private Font clockFaceFont;
// Font for number display on clock
private Date currentDate;
// Used to get date to display
private Color handColor;
// Color of main hands and dial
private Color numberColor;
// Color of second hand and numbers
private int xcenter = 80, ycenter = 55;
// Center position
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, 14);
try {
setBackground(Color.green);
} catch (NullPointerException e) {
} catch (NumberFormatException e) {
}
try {
handColor = new Color(1,24,16);
} catch (NullPointerException e) {
} catch (NumberFormatException e) {
}
try {
numberColor = new Color(6,9,16);
} catch (NullPointerException e) {
} catch (NumberFormatException e) {
}
resize(300,300);
// Set clock window size
}
// Paint is the main part of the program
public void update(Graphics g) {
int xh, yh, xm, ym, xs, ys;
int s = 0, m = 10, h = 10;
String today;
currentDate = new Date();
formatter.applyPattern("s");
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;
}
// Set position of the ends of the hands
xs = (int) (Math.cos(s * Math.PI / 30
- Math.PI / 2) * 45 + xcenter);
ys = (int) (Math.sin(s * Math.PI / 30
- Math.PI / 2) * 45 + ycenter);
xm = (int) (Math.cos(m * Math.PI / 30
- Math.PI / 2) * 40 + xcenter);
ym = (int) (Math.sin(m * Math.PI / 30
- Math.PI / 2) * 40 + ycenter);
xh = (int) (Math.cos((h*30 + m / 2)
* Math.PI / 180 - Math.PI / 2) * 30
+ xcenter);
yh = (int) (Math.sin((h*30 + m / 2)
* Math.PI / 180 - Math.PI / 2) * 30
+ ycenter);
// Get the date to print at the bottom
formatter.applyPattern("EEE MMM dd HH:mm:ss yyyy");
today = formatter.format(currentDate);
g.setFont(clockFaceFont);
// Erase if necessary
g.setColor(getBackground());
if (xs != lastxs || ys != lastys) {
g.drawLine(xcenter, ycenter, lastxs, lastys);
g.drawString(lastdate, 5, 125);
}
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);
}
// Draw date and hands
g.setColor(numberColor);
g.drawString(today, 5, 125);
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);
lastxs = xs; lastys = ys;
lastxm = xm; lastym = ym;
lastxh = xh; lastyh = yh;
lastdate = today;
currentDate = null;
}
public void paint(Graphics g) {
g.setFont(clockFaceFont);
// Draw the circle and numbers
g.setColor(handColor);
g.drawArc(xcenter-50, ycenter-50, 100, 100, 0, 360);
g.setColor(numberColor);
g.drawString("9", xcenter-45, ycenter+3);
g.drawString("3", xcenter+40, ycenter+3);
g.drawString("12", xcenter-5, ycenter-37);
g.drawString("6", xcenter-3, ycenter+45);
// Draw date and hands
g.setColor(numberColor);
g.drawString(lastdate, 5, 125);
g.drawLine(xcenter, ycenter, lastxs, lastys);
g.setColor(handColor);
g.drawLine(xcenter, ycenter-1, lastxm, lastym);
g.drawLine(xcenter-1, ycenter, lastxm, lastym);
g.drawLine(xcenter, ycenter-1, lastxh, lastyh);
g.drawLine(xcenter-1, ycenter, lastxh, lastyh);
}
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();
}
}
}
No comments:
Post a Comment