applet-----Clock

//在本目录下新建一个记事本,保存为html的网页文件,内容为<applet code="Clock2.class" width=200 height=150></applet>
//最后打开该网页
*/

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

public class Clock2 extends Applet implements Runnable {
Thread timer = null;
int lastxs=0, lastys=0, lastxm=0, lastym=0, lastxh=0, lastyh=0;
//Date dummy = new Date(); 不要用了
Calendar cal = Calendar.getInstance(); //使用新库
DateFormat df = DateFormat.getDateInstance();
//String lastdate = dummy.toLocaleString();
String lastdate = df.format(cal.getTime()); //使用新方法


public void init() {
int x,y;
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) {
int xh, yh, xm, ym, xs, ys, s, m, h, xcenter, ycenter;
String today;
/* 不用在使用Data类了
Date dat = new Date();
s = dat.getSeconds();
m = dat.getMinutes();
h = dat.getHours();
today = dat.toLocaleString();

*/

s = cal.get(Calendar.SECOND); //使用新库新方法
m = cal.get(Calendar.MINUTE); //使用新库新方法
h = cal.get(Calendar.HOUR); //使用新库新方法
today=df.format(cal.getTime()); //使用新库新方法

xcenter=80;
ycenter=55;

// a= s* pi/2 - pi/2 (to switch 0,0 from 3:00 to 12:00)
// x = r(cos a) + xcenter, y = r(sin a) + ycenter

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

// Draw the circle and numbers

g.setFont(new Font("TimesRoman", Font.PLAIN, 14));
g.setColor(Color.blue);
circle(xcenter,ycenter,50,g);
g.setColor(Color.darkGray);
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);

// Erase if necessary, and redraw

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); }
g.setColor(Color.darkGray);
g.drawString(today, 5, 125);
g.drawLine(xcenter, ycenter, xs, ys);
g.setColor(Color.blue);
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;
}

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

public void stop() {
timer = null;
}

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

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



转载于:https://www.cnblogs.com/theotherme/archive/2008/10/03/1303297.html

好的,我来为你解答这个问题。 首先,我们需要了解一下 Applet 是什么。AppletJava 语言中的一种特殊类,它可以在网页中运行,可以用来实现一些动态效果,比如游戏、动画等。而 ClockApplet 就是一种 Applet,它可以显示当前时间并且每秒钟更新一次。 下面是一个简单的 ClockApplet 的设计思路: 1. 继承 Applet 类,重写 init() 和 paint() 方法。 2. 在 init() 方法中创建一个线程,用来更新时间。 3. 在 paint() 方法中绘制当前时间。 下面是具体的代码实现: ```java import java.applet.Applet; import java.awt.Graphics; import java.util.Calendar; public class ClockApplet extends Applet implements Runnable { Thread t = null; int hours = 0, minutes = 0, seconds = 0; public void init() { setBackground( Color.white ); } public void start() { t = new Thread( this ); t.start(); } public void stop() { t = null; } public void run() { while (true) { Calendar cal = Calendar.getInstance(); hours = cal.get( Calendar.HOUR_OF_DAY ); if (hours > 12) hours -= 12; minutes = cal.get( Calendar.MINUTE ); seconds = cal.get( Calendar.SECOND ); repaint(); try { Thread.sleep( 1000 ); } catch (InterruptedException e) { e.printStackTrace(); } } } public void paint(Graphics g) { g.drawString( hours + ":" + minutes + ":" + seconds, 50, 50 ); } } ``` 上面的代码中,我们创建了一个 ClockApplet 类,继承了 Applet 类,并实现了 Runnable 接口。在 init() 方法中,我们设置了背景颜色。在 start() 方法中,我们创建了一个线程,并启动它。在 run() 方法中,我们使用 Calendar 类获取当前时间,并在每次更新时调用 repaint() 方法重绘界面。在 paint() 方法中,我们使用 Graphics 类绘制当前时间。 最后,我们需要将 ClockApplet 类编译成 Applet 文件,并将其嵌入到 HTML 页面中。这里就不再赘述了,如果你不清楚怎么做,可以查找相关的教程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值