Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1119505
  • 博文数量: 65
  • 博客积分: 8010
  • 博客等级: 中将
  • 技术积分: 720
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-22 23:04
文章分类

全部博文(65)

文章存档

2008年(7)

2007年(58)

我的朋友

分类: Java

2007-06-28 17:45:40

用JAVA编写时间界面,时钟界面必须要带有刻度,时分秒三根针,秒针可以扫过整个圆  
   

import java.util.*;
import java.awt.*;
import java.applet.*;
//impelements Runnable 是线程程序的接口
public class Clock extends Applet implements Runnable
{
Thread timer=null; //定义线程实体timer
int xcenter=400,ycenter=50;
int Radius=ycenter-5;
public void init()
{
resize(400,125);//设置时钟程序的窗口大小
setBackground(Color.white);//设置小应用程序的背景色
}
public void paint(Graphics g)
{
int xh,yh,xm,ym,xs,ys,s,m,h;
String today;
Date dat=new Date(); //定义时间类dat
s=dat.getSeconds(); //获得时间秒
m=dat.getMinutes(); //获得时间分
h=dat.getHours();
today=dat.toLocaleString(); //获得字符串时间格式
g.clearRect(0,0,size().width,size().height); //消除小应用程序
xcenter=xcenter-1; //向左移动一个像素点
if(xcenter<-50)
xcenter=400; //如果xcenter小于-50,则回到初始位置
//计算秒的坐标
xs=(int)(Math.cos(s*3.14f/30-3.14f/2)*(Radius-5)+xcenter);
ys=(int)(Math.sin(s*3.14f/30-3.14f/2)*(Radius-5)+ycenter); //计算分钟的坐标
xm=(int)(Math.cos(m*3.14f/30-3.14f/2)*(Radius-10)+xcenter);
ym=(int)(Math.sin(m*3.14f/30-3.14f/2)*(Radius-10)+ycenter); //计算小时的坐标
xh=(int)(Math.cos((h*30+m/2)*3.14f/180-3.14f/2)*(Radius-20)+xcenter);
yh=(int)(Math.sin((h*30+m/2)*3.14f/180-3.14f/2)*(Radius-20)+ycenter);
g.setColor(Color.darkGray); //设置颜色
g.drawString("9",xcenter-(Radius-5),ycenter+3); //显示时钟上的数字‘9’
g.drawString("3",xcenter+(Radius-10),ycenter+3); //显示时钟上的数字‘3’
g.drawString("12",xcenter-5,ycenter-(Radius-13)); //显示时钟上的数字'12'
g.drawString("6",xcenter-3,ycenter+(Radius-10)); //显示时钟上的数字'6'
g.drawString(today,0,125); //显示字符串时钟
g.drawLine(xcenter,ycenter,xs,ys); //画秒针
g.setColor(Color.blue); //设置颜色
g.drawArc(xcenter-Radius,ycenter-Radius,2*Radius,2*Radius,0,360); //画钟
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); //画时针
}
public void start()
{
if(timer==null)
{
timer=new Thread(this); //生成Thread(多线程程序)的对象实体
timer.start(); //启动生成的线程
}
}
public void stop()
{
timer.stop(); //停止线程的工作
timer=null; //放掉Thread对象
}
public void run() //改方法用来定义线程体,一旦线程被启动执行,就开始执行这个方法
{
while(timer!=null)
{
try
{
Thread.sleep(150); //使当前正在执行的线程进入睡眠时间由参数millis确定,
//单位时间是毫秒,当这个时间过去,线程即可运行的
while(timer!=null)
{
try
{
Thread.sleep(150);//使用当前正在执行的线程进入睡眠时间由参数
//millis确定,单位是毫秒,当这个时间过去,线程即为可运行的
}
catch(InterruptedException e)
{}
repaint(); //repaint所做的事其实是去调用方法uadate重画效应用程序
}
timer=null;
}
catch(InterruptedException e)
{}
}
}
//所做的工作是先将整个效应用程序区域清除,再去调用paint,完成重画的动作
public void update(Graphics g)
{
paint(g);
}
}
阅读(5816) | 评论(1) | 转发(0) |
0

上一篇:test

下一篇:java小程序实例 计算器

给主人留下些什么吧!~~

chinaunix网友2009-04-17 14:27:18

谢谢,共享了啊!Thanks very much!