您的位置:首页 > 其它

第5周作业-时钟动画程序

2014-04-02 01:08 246 查看
经过下午和晚上的努力,把时钟动画程序做了出来;参考了下教程里面的程序和《Java语言程序设计》里的程序;

然后更加简化和容易的做了出来。

出现问题:1、使用Calendar 的子类 GregorianCalendar 时是星期是从1开始的(1-星期天,2星期一.......);月份是从0开始计算的(0
- 一月,1 - 二月........) ;不知道如何改!

                    2、界面修改了,有点美观了。

  下载图片

/* 程序功能:实现简单的时钟动画程序,显示当前时间
* 作者:李家华
* 时间:2014.04.02
* QQ:*********联系博客
* */

import java.applet.Applet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.Calendar;
import java.util.GregorianCalendar;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ClockDemo extends JFrame {

public ClockDemo()
{
ClockPanel jp_clock=new ClockPanel();
add(jp_clock);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400,400);
//pack();
setTitle("简单的时钟动画");
this.setLocationRelativeTo(null);     //设置窗体居中显示
setVisible(true);
Thread ClockRun=new Thread(jp_clock);  //用于显示时钟的线程
ClockRun.start();
}
public static void main(String[] args) {
// TODO Auto-generatedmethod stub
new ClockDemo();
}
}
class ClockPanel extends JPanel implements Runnable
{
private double CenterX,CenterY; //设置时钟的表盘的中心点
private double Radius=150;      //设置时钟圆半径
private double HPointX,HPointY,MPointX,MPointY,SPointX,SPointY;   //时针、分针、秒针的坐标
private int Year,Month,Day,WeekDay,Hour,Minute,Second;
private final double PI=3.1415926;
public synchronized void paintComponent(Graphics g)   //绘制面板里的时钟内容
{
super.paintComponent(g);
this.setBackground(Color.LIGHT_GRAY);
CenterX=this.getWidth()/2;
CenterY=this.getHeight()/2;

double HRadian=(PI/6)*Hour+(PI/360)*Minute+(PI/21600)*Second;    //各个指针的弧度
double MRadian=(PI/30)*Minute+(PI/1800)*Second;
double SRadian=(PI/30)*Second;
HPointX=CenterX+Radius*0.6*Math.sin(HRadian);
HPointY=CenterY-Radius*0.6*Math.cos(HRadian);
MPointX=CenterX+Radius*0.8*Math.sin(MRadian);
MPointY=CenterY-Radius*0.8*Math.cos(MRadian);
SPointX=CenterX+Radius*Math.sin(SRadian);
SPointY=CenterY-Radius*Math.cos(SRadian);

Font cf = new Font("Srrif", Font.PLAIN,15);
g.drawOval((int)(CenterX-Radius), (int)(CenterY-Radius), (int)(2*Radius),(int)(2*Radius));//画时钟椭圆
g.setColor(Color.BLUE);
g.setFont(cf);

g.drawString("12",(int)(CenterX),(int)(CenterY-Radius)+10);      //画时钟表盘里的数字
g.drawString("3",(int)(CenterX+Radius)-6 , (int)(CenterY));
g.drawString("6", (int)(CenterX), (int)(CenterY+Radius));
g.drawString("9",(int)(CenterX-Radius), (int)(CenterY));
g.setColor(Color.RED);

//绘图
Image img = null;
try {
img = ImageIO.read(new File("723280_140551276000_2.jpg"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
g.drawImage( img , 0, 0,this);

g.drawLine((int)(CenterX), (int)(CenterY), (int)(SPointX), (int)(SPointY));//画线
g.drawLine((int)(CenterX), (int)(CenterY), (int)(MPointX), (int)(MPointY));
g.drawLine((int)(CenterX), (int)(CenterY), (int)(HPointX), (int)(HPointY));

g.drawString("星期"+WeekDay+"  "+Month+"月"+" "+Day+"号"+" "+" 时间是: "+Hour+":"+Minute+":"+Second+"   "+Year+"年", 20, 350);

}
@Override
public void run() {   //时钟运行时启动线程的run方法
// TODO Auto-generatedmethod stub
while(true)
{
try {
setCurrentTime();   //调用下面的setCurrentTime方法
repaint();
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}

public void setCurrentTime()
{
Calendar calendar=new GregorianCalendar();   //使用calendar类实现
Year=calendar.get(Calendar.YEAR);
Month=calendar.get(Calendar.MONTH);
Day=calendar.get(Calendar.DAY_OF_MONTH);
WeekDay=calendar.get(Calendar.DAY_OF_WEEK);
Hour=calendar.get(Calendar.HOUR);
Minute=calendar.get(Calendar.MINUTE);
Second=calendar.get(Calendar.SECOND);

}
}




优化修改后

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: