第5周作业-时钟动画程序(15-10)

/**
 * 《Java语言程序设计》P418/439 程序清单15-9,StillClock类
 * xiaowei
 */

import java.awt.*;
import javax.swing.*;
import java.util.*;



public class StillClock extends JPanel
{
	 
	private int hour;
	private int minute;
	private int second;
		
	/**Construct a default clock with the current time*/
	public StillClock(){
		setCurrentTime();
		
	}
     /**construct a clock with specified hour,minute,and second*/
	public StillClock(int hour,int minute,int second){
		this.hour = hour;
		this.minute = minute;
		this.second = second;
		
	}
	/**return hour */
	public int getHour(){
		return hour;
		
	}
	/**set a new hour*/
	public void setHour(int hour){
		this.hour = hour;
		repaint();
		
	}
	/**return minute*/
	public int getMinute(){
		return minute;
		
	}
	/**set a new minute*/
	public void setMinute(int minute){
		this.minute = minute;
		repaint();
		
	}
	/**return second*/
	public int getSecond(){
		return second;
		
	}
	
	/** set a new second*/
	public void setSecond(int second){
		this.second = second;
		repaint();
	}
	/**draw the clock*/
	protected void paintComponent(Graphics g){
		super.paintComponent(g);
		
		int clockRadius = 
				(int)(Math.min(getWidth(),getHeight()) * 0.8 *0.5);
		int xCenter = getWidth()/2;
		int yCenter = getHeight()/2;
		
		
		g.setColor(Color.black);
		g.drawOval(xCenter- clockRadius, yCenter - clockRadius, 2*clockRadius, 2*clockRadius);
		g.drawString("12", xCenter-5, yCenter -clockRadius + 12);
		g.drawString("9", xCenter-clockRadius+3, yCenter  + 5);
		g.drawString("3", xCenter+clockRadius - 10, yCenter +3 );
		g.drawString("6", xCenter-3, yCenter+clockRadius -3 );
		
		
		int sLength = (int) (clockRadius * 0.8);
		int xSecond = (int)(xCenter + sLength *
				Math.sin(second * (2*Math.PI/60)));
		int ySecond = (int)(yCenter - sLength *
				Math.cos(second * (2 * Math.PI/60)));
		g.setColor(Color.red);
		g.drawLine(xCenter, yCenter, xSecond, ySecond);
		
		
		int mLength = (int)(clockRadius * 0.65);
		int xMinute = (int)(xCenter + mLength *
				Math.sin(minute*(2*Math.PI/60)));
		int  yMinute = (int)(yCenter + mLength*
				Math.cos(minute*(2*Math.PI/60)));
		g.setColor(Color.blue);
		g.drawLine(xCenter, yCenter, xMinute, yMinute);
		
		
		
		int hLength = (int)(clockRadius * 0.5);
		int xHour = (int)(xCenter - hLength*
				Math.sin((hour%12 + minute/60.0)*(2*Math.PI/12)));
		int yHour = (int)(yCenter - hLength*
				Math.cos((hour%12 + minute/60.0)*(2*Math.PI/12)));
		g.setColor(Color.green);
		g.drawLine(xCenter, yCenter, xHour, yHour);
		
	}
	
	
	public void setCurrentTime(){
		
		Calendar calendar = new GregorianCalendar();
		
		
		this.hour = calendar.get(Calendar.HOUR_OF_DAY);
		this.minute = calendar.get(Calendar.MINUTE);
		this.second = calendar.get(Calendar.SECOND);
	}
	public Dimension getPreferredSize(){
		return new Dimension(200,200);
		
	}
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值