第5周作业-时钟动画程序
2014-04-02 01:08
246 查看
经过下午和晚上的努力,把时钟动画程序做了出来;参考了下教程里面的程序和《Java语言程序设计》里的程序;
然后更加简化和容易的做了出来。
出现问题:1、使用Calendar 的子类 GregorianCalendar 时是星期是从1开始的(1-星期天,2星期一.......);月份是从0开始计算的(0
- 一月,1 - 二月........) ;不知道如何改!
2、界面修改了,有点美观了。
下载图片
优化修改后
然后更加简化和容易的做了出来。
出现问题: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); } }
优化修改后
相关文章推荐
- 第5周作业-时钟动画程序(15-10)
- 第5周作业-时钟动画程序
- 第5周作业-时钟动画程序(15-9)
- 第5周作业-时钟动画程序
- 第5周作业-打字成绩判断程序
- 第5周作业-打字成绩判断程序GUI(未完成)
- 第5周作业-打字成绩判断程序(双版本)
- 第5周作业-贷款计算器程序
- 第5周作业-打字成绩判断程序GUI
- 第5周作业-贷款计算器程序
- 第5周作业-打字成绩判断程序
- 第5周作业-贷款计算器程序
- 第5周作业-打字成绩判断程序TouchType
- 程序状态字(PSW)的动画说明,
- 编译原理作业:编写一个程序,使之将一个C程序除注释之外的所有保留字全部大写
- 微信小程序中使用wxss加载图片并实现动画
- 第一周作业1——编写计算“两个整数的最大公约数”程序
- 在VC程序中加载动画[转]
- 软件工程第一次作业 四则运算程序编写
- 程序开过多线程,导致hadoop作业无法运行成功——Call to hadoop1:9000 failed on lo cal exception: java.io.IOException: Coul