| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2455 人关注过本帖
标题:java时钟程序
只看楼主 加入收藏
wxzyn123
Rank: 1
来 自:江苏
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-9-15
收藏
 问题点数:0 回复次数:8 
java时钟程序

在书上看到一个关于时钟的java小程序,但是看懂真的很费力
想请高手指教一下
请看

搜索更多相关主题的帖子: java 时钟 费力 
2007-11-17 19:10
wxzyn123
Rank: 1
来 自:江苏
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-9-15
收藏
得分:0 

import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.*;
import java.util.Calendar;
import java.util.GregorianCalender;

public class Clock extends JFrame implements ActionListener{
int x,y,x0,y0,r,h,olds_x,olds_y,oldm_x,oldm_y,oldh_x,oldh_y,ss,mm,hh,old_m,old_h,
ang;
final double RAD=Math.PI/180; //度数转化成弧度的比例

//构造函数创建一个窗体
public Clock(){
super("java 时钟");
setDefaultCloseOperation(3);
Image image=getToolkit().getImage("clock gif");
setIconImage(image);
setSize(200,200);
setBackground(Color.BLACK);
setLocation(300,150);
setResizable(false);
show();
int delay=1000;
//创建一个监听事件
ActionListener drawClock=new ActionListener(){
public void actionPerformed(ActionEvent e){
repaint();
}
};
//创建一个时间计数器,每一秒触发一次
new Timer(delay,drawClock).start();
}

//实现ActionListener接口必须实现的方法
public void actionPerformed(ActionEvent e){ }

//绘制图形
public void paint(Graphics g){
Insets insets=getInsets();
int L=insets.left/2,T=insets.top/2;
h=getSize().height;
g.setColor(Color.white);
//画圆
g2D.setStrock(new BasicStrock(4.0f));
g.drawOval(L+40,T+40,h-80,h-80);
r=h/2-40;
x0=40+r-5+L;y0=40+r-5-T;
ang=60;
//绘制始终上的12个数字
for(int i=1;i<=12;i++){
x=(int)((r+10)*Math.cos(RAD*ang)+x0);
y=(int)((r+10)*Math.sin(RAD*ang)+y0);
g.drawString(""+i,x,h-y);
ang-=30;
}
//获得现在的时间
Calendar now=new GregorianCalendar();
int nowh=now.get(Calendar.HOUR_OF_DAY);
int nowm=now.get(Calendar.MINUTE);
int nows=now.get(Calendar.SECOND);
String st;
if(nowh<10) st="0"+nowh;else st=""+nowh;
if(nowm<10) st+=":0"+nowm; else st+=":"+nowm;
if(nows<10) st+=":0"+nows; else st+=":"+nows;
//在窗体上显示时间
g.setColor(Color.pink);
g.fillRect(L,T,50,28);
g.setColor(Color.blue);
g.drawString(st,L+2,T+26);
//计算时间与度数的关系
ss=90-nows*6;
mm=90-nowm*6;
hh=90-nowh*30-nowm/2;
x0=r+40+L;y0=r+40+T;
g2D.setStroke(new BasicStroke(1.2f));
//擦除秒针
if(olds_x>0){
g.setColor(getBackground());
g.drawLine(x0,y0,olds_x,olds_y);
}
else{
old_m=mm;old_h=hh;
}
//绘制秒针
x=(int)(r*0.9*Math.cos(RAD*ss))+x0;
y=(int)(r*0.9*Math.sin(RAD*ss))+y0-2*T;
g.setColor(Color.pink);
g.drawLine(x0,y0,x,h-y);
olds_x=x;olds_y=y;
g2D.setStroke(new BasicStroke(2.2f));
//擦除分针
if(old_m!=mm){
g.setColor(getBackground());
g.drawLine(x0,y0,oldm_x,oldm_y);
}
//绘制分真
x=(int)(r*0.7*Math.cos(RAD*ss))+x0;
y=(int)(r*0.7*Math.sin(RAD*ss))+y0-2*T;
g.setColor(getBackground());
g.drawLine(x0,y0,oldm_x,oldm_y);
oldm_x=x;oldm_y=y;
old_m=mm;
g2D.setStroke(new BasicStroke(3.4f));
//擦除时针
if(old_h!=hh){
g.setColor(getBackground());
g.drawLine(x0,y0,oldm_x,oldm_y);
}
//绘制时针
x=(int)(r*0.5*Math.cos(RAD*ss))+x0;
y=(int)(r*0.5*Math.sin(RAD*ss))+y0-2*T;
g.setColor(getBackground());
g.drawLine(x0,y0,oldm_x,oldm_y);
oldm_x=x;oldm_y=y;
old_h=hh;
}
public static void main(String[] args){
Clock clock=new Clock();
}

2007-11-17 19:12
wxzyn123
Rank: 1
来 自:江苏
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-9-15
收藏
得分:0 

import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.*;
import java.util.Calendar;
import java.util.GregorianCalender;

public class Clock extends JFrame implements ActionListener{
int x,y,x0,y0,r,h,olds_x,olds_y,oldm_x,oldm_y,oldh_x,oldh_y,ss,mm,hh,old_m,old_h,
ang;
final double RAD=Math.PI/180; //度数转化成弧度的比例

//构造函数创建一个窗体
public Clock(){
super("java 时钟");
setDefaultCloseOperation(3); 想问,这里是什么意思,为什么里面可以是个int值
Image image=getToolkit().getImage("clock gif");
setIconImage(image); 这里是什么意思呢
setSize(200,200);
setBackground(Color.BLACK);
setLocation(300,150);
setResizable(false);
show();
int delay=1000;
//创建一个监听事件
ActionListener drawClock=new ActionListener(){
public void actionPerformed(ActionEvent e){
repaint();
}
};
//创建一个时间计数器,每一秒触发一次
new Timer(delay,drawClock).start(); 这里呢,delay是什么意思,代表什么
}

//实现ActionListener接口必须实现的方法
public void actionPerformed(ActionEvent e){ }

//绘制图形
public void paint(Graphics g){
Insets insets=getInsets(); 这里又是什么意思
int L=insets.left/2,T=insets.top/2; 这里又是什么意思
h=getSize().height;
g.setColor(Color.white);
//画圆
g2D.setStrock(new BasicStrock(4.0f)); 这里又是什么意思
g.drawOval(L+40,T+40,h-80,h-80);
r=h/2-40;
x0=40+r-5+L;y0=40+r-5-T;
ang=60;
//绘制始终上的12个数字
for(int i=1;i<=12;i++){
x=(int)((r+10)*Math.cos(RAD*ang)+x0);
y=(int)((r+10)*Math.sin(RAD*ang)+y0);
g.drawString(""+i,x,h-y);
ang-=30;
}
//获得现在的时间
Calendar now=new GregorianCalendar();
int nowh=now.get(Calendar.HOUR_OF_DAY);
int nowm=now.get(Calendar.MINUTE);
int nows=now.get(Calendar.SECOND);
String st;
if(nowh<10) st="0"+nowh;else st=""+nowh;
if(nowm<10) st+=":0"+nowm; else st+=":"+nowm;
if(nows<10) st+=":0"+nows; else st+=":"+nows;
//在窗体上显示时间
g.setColor(Color.pink);
g.fillRect(L,T,50,28);
g.setColor(Color.blue);
g.drawString(st,L+2,T+26);
//计算时间与度数的关系
ss=90-nows*6;
mm=90-nowm*6;
hh=90-nowh*30-nowm/2;
x0=r+40+L;y0=r+40+T;
g2D.setStroke(new BasicStroke(1.2f));
//擦除秒针 下面擦除,绘制秒针,分针,时针看不明白.请高手解释下啊
if(olds_x>0){
g.setColor(getBackground());
g.drawLine(x0,y0,olds_x,olds_y);
}
else{
old_m=mm;old_h=hh;
}
//绘制秒针
x=(int)(r*0.9*Math.cos(RAD*ss))+x0;
y=(int)(r*0.9*Math.sin(RAD*ss))+y0-2*T;
g.setColor(Color.pink);
g.drawLine(x0,y0,x,h-y);
olds_x=x;olds_y=y;
g2D.setStroke(new BasicStroke(2.2f));
//擦除分针
if(old_m!=mm){
g.setColor(getBackground());
g.drawLine(x0,y0,oldm_x,oldm_y);
}
//绘制分真
x=(int)(r*0.7*Math.cos(RAD*ss))+x0;
y=(int)(r*0.7*Math.sin(RAD*ss))+y0-2*T;
g.setColor(getBackground());
g.drawLine(x0,y0,oldm_x,oldm_y);
oldm_x=x;oldm_y=y;
old_m=mm;
g2D.setStroke(new BasicStroke(3.4f));
//擦除时针
if(old_h!=hh){
g.setColor(getBackground());
g.drawLine(x0,y0,oldm_x,oldm_y);
}
//绘制时针
x=(int)(r*0.5*Math.cos(RAD*ss))+x0;
y=(int)(r*0.5*Math.sin(RAD*ss))+y0-2*T;
g.setColor(getBackground());
g.drawLine(x0,y0,oldm_x,oldm_y);
oldm_x=x;oldm_y=y;
old_h=hh;
}
public static void main(String[] args){
Clock clock=new Clock();
}

2007-11-17 19:39
netstriker
Rank: 1
等 级:新手上路
威 望:1
帖 子:257
专家分:0
注 册:2007-3-24
收藏
得分:0 

或者如果是初学的话,建议选看哪些短一些程序,太长的话,看起来会麻烦很多.

import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.*;
import java.util.Calendar;
import java.util.GregorianCalender;

public class Clock extends JFrame implements ActionListener{
int x,y,x0,y0,r,h,olds_x,olds_y,oldm_x,oldm_y,oldh_x,oldh_y,ss,mm,hh,old_m,old_h,
ang;
final double RAD=Math.PI/180; //度数转化成弧度的比例

//构造函数创建一个窗体
public Clock(){
super("java 时钟");setDefaultCloseOperation(3);想问,这里是什么意思,为什么里面可以是个int值 是因为JFrame.EXIT_ON_CLOSE 的值是3,也可以JFrame.EXIT_ON_CLOSEw
Image image=getToolkit().getImage("clock gif");
setIconImage(image); 这里是什么意思呢 指程序的Icon图标
setSize(200,200);
setBackground(Color.BLACK);
setLocation(300,150);
setResizable(false);
show();
int delay=1000;
//创建一个监听事件
ActionListener drawClock=new ActionListener(){
public void actionPerformed(ActionEvent e){
repaint();
}
};
//创建一个时间计数器,每一秒触发一次
new Timer(delay,drawClock).start(); // 这里呢,delay是什么意思,代表什么 是指执行drawClock的间隔时间
}

//实现ActionListener接口必须实现的方法
public void actionPerformed(ActionEvent e){ }

//绘制图形
public void paint(Graphics g){
Insets insets=getInsets(); // 这里又是什么意思 是指一个组件边界的宽度.
int L=insets.left/2,T=insets.top/2; 这里又是什么意思 是指这一个宽度的一半,
h=getSize().height;
g.setColor(Color.white);
//画圆
g2D.setStrock(new BasicStrock(4.0f)); // 这里又是什么意思 <--这是说那个时针,秒针那些的线画得粗一些
g.drawOval(L+40,T+40,h-80,h-80);
r=h/2-40;
x0=40+r-5+L;y0=40+r-5-T;
ang=60;
//绘制始终上的12个数字
for(int i=1;i<=12;i++){
x=(int)((r+10)*Math.cos(RAD*ang)+x0);
y=(int)((r+10)*Math.sin(RAD*ang)+y0);
g.drawString(""+i,x,h-y);
ang-=30;
}
//获得现在的时间
Calendar now=new GregorianCalendar();
int nowh=now.get(Calendar.HOUR_OF_DAY);
int nowm=now.get(Calendar.MINUTE);
int nows=now.get(Calendar.SECOND);
String st;
if(nowh<10) st="0"+nowh;else st=""+nowh;
if(nowm<10) st+=":0"+nowm; else st+=":"+nowm;
if(nows<10) st+=":0"+nows; else st+=":"+nows;
//在窗体上显示时间
g.setColor(Color.pink);
g.fillRect(L,T,50,28);
g.setColor(Color.blue);
g.drawString(st,L+2,T+26);
//计算时间与度数的关系
ss=90-nows*6;
mm=90-nowm*6;
hh=90-nowh*30-nowm/2;
x0=r+40+L;y0=r+40+T;
g2D.setStroke(new BasicStroke(1.2f));
//擦除秒针 // 下面擦除,绘制秒针,分针,时针看不明白.请高手解释下啊 -->就是说要把一秒前的秒针,分针等擦除.
if(olds_x>0){
g.setColor(getBackground());
g.drawLine(x0,y0,olds_x,olds_y);
}
else{
old_m=mm;old_h=hh;
}
//绘制秒针
x=(int)(r*0.9*Math.cos(RAD*ss))+x0;
y=(int)(r*0.9*Math.sin(RAD*ss))+y0-2*T;
g.setColor(Color.pink);
g.drawLine(x0,y0,x,h-y);
olds_x=x;olds_y=y;
g2D.setStroke(new BasicStroke(2.2f));
//擦除分针
if(old_m!=mm){
g.setColor(getBackground());
g.drawLine(x0,y0,oldm_x,oldm_y);
}
//绘制分真
x=(int)(r*0.7*Math.cos(RAD*ss))+x0;
y=(int)(r*0.7*Math.sin(RAD*ss))+y0-2*T;
g.setColor(getBackground());
g.drawLine(x0,y0,oldm_x,oldm_y);
oldm_x=x;oldm_y=y;
old_m=mm;
g2D.setStroke(new BasicStroke(3.4f));
//擦除时针
if(old_h!=hh){
g.setColor(getBackground());
g.drawLine(x0,y0,oldm_x,oldm_y);
}
//绘制时针
x=(int)(r*0.5*Math.cos(RAD*ss))+x0;
y=(int)(r*0.5*Math.sin(RAD*ss))+y0-2*T;
g.setColor(getBackground());
g.drawLine(x0,y0,oldm_x,oldm_y);
oldm_x=x;oldm_y=y;
old_h=hh;
}
public static void main(String[] args){
Clock clock=new Clock();
}

2007-11-18 01:44
Andylauzxb
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2007-10-15
收藏
得分:0 

这么深奥````不懂````

2007-11-18 09:06
wxzyn123
Rank: 1
来 自:江苏
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-9-15
收藏
得分:0 
谢谢楼上的回答

可是那个擦除时针,分针,秒针的地方还是理解不了,可是具体说一下吗

还有就是里面的变量如old_m,old_h是什么意思,看了很久不明白

x=(int)(r*0.5*Math.cos(RAD*ss))+x0;
y=(int)(r*0.5*Math.sin(RAD*ss))+y0-2*T;
这2个是公式吗?

请高手再帮帮忙额
2007-11-18 10:27
netstriker
Rank: 1
等 级:新手上路
威 望:1
帖 子:257
专家分:0
注 册:2007-3-24
收藏
得分:0 
old_m,old_h是指先前一秒的分针,秒针的坐标位置.

x=(int)(r*0.5*Math.cos(RAD*ss))+x0;
y=(int)(r*0.5*Math.sin(RAD*ss))+y0-2*T; 这两个指的是初中学的什么三角函数.

r就是半径, RAD*ss 就是指角度.
2007-11-18 13:35
wxzyn123
Rank: 1
来 自:江苏
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-9-15
收藏
得分:0 
那个擦除时针,分针,秒针的地方
能具体说说吗
谢了先
2007-11-18 22:56
wxzyn123
Rank: 1
来 自:江苏
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-9-15
收藏
得分:0 
olds_x,olds_y,oldm_x,oldm_y,oldh_x,oldh_y
这几个是前一秒的指针的坐标
我问的是old_m,old_h
2007-11-19 11:03
快速回复:java时钟程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017828 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved