⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clock.java

📁 优秀的钟表运行程序,准备的模拟现实中的钟表运行
💻 JAVA
字号:
/**
 * @author xushun
 * @author 2007/9/19
 * 一个钟表
 */


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.geom.*;
import java.util.GregorianCalendar;
import java.util.Calendar;

public class Clock {
	public static void main(String[] args)
	{
		ClockFrame frame = new ClockFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}

}

class ClockFrame extends JFrame
{
	public ClockFrame()
	{
		setTitle("Clock");
		setSize(250,250);
		
		ClockJPanel panel = new ClockJPanel();
		add(panel);
	}
}

class ClockJPanel extends JPanel
{
	public ClockJPanel()
	{
		//setPreferredSize(new Dimension(2*RADIUS + 1,2*RADIUS + 1));
		
		calendar = new GregorianCalendar();         //获得现在时间
		hours = calendar.get(Calendar.HOUR);        //现在小时数
		minutes =calendar.get(Calendar.MINUTE);     //现在多少分  
		seconds = calendar.get(Calendar.SECOND);    //现在多少秒
		
		//center = new Point2D.Double(RADIUS,RADIUS);
		
		//一个定时器,每隔一秒自动绘图
		//用来实现钟表的自动旋转
		t = new Timer(1000,new ActionListener()
				{
			         public void actionPerformed(ActionEvent event)
			         {
			        	 repaint();
			         }
				});
		t.start();
	}
	
	public void paintComponent(Graphics g)
	{
		super.paintComponent(g);
		Graphics2D g2 =(Graphics2D)g;
		
		drawClock(g2);         //绘画钟表
		
		drawClockCircle(g2);  //绘画钟表圈
		
		increaseTime();       //每隔一秒时间递增 
	}
	
	//绘画钟表
	public void drawClock(Graphics2D g2)
	{
		double hourRadian = Math.toRadians((hours + minutes/60)*360/12);   //时针所转过的弧度数
		double minuteRadian = Math.toRadians(minutes*360/60);              //分针所转过的弧度数
		double secondRadian = Math.toRadians(seconds*360/60);              //秒针所转过的弧度数
		
		g2.setColor(Color.RED);                   //用红色绘画时针
		drawHand(g2,hourRadian,HOUR_LENGTH);
		g2.setColor(Color.BLUE);                  //用蓝色绘画分针
		drawHand(g2,minuteRadian,MINUTE_LENGTH);
		g2.setColor(Color.GREEN);                  //用绿色绘画秒针 
		drawHand(g2,secondRadian,SECOND_LENGTH);
	}
	
	//绘画钟表圈(60个点)
	//每隔四点小点绘画一个大点
	//每个大点分别表示(1,2,3……12)
	public void drawClockCircle(Graphics2D g2)
	{
		for(int i = 0;i < 60;i++)
		{
			double ridian = Math.toRadians(6*i);
			
			double x = RADIUS*(1 + Math.sin(ridian));
			double y = RADIUS*(1 - Math.cos(ridian));
			
			double m = MIN;
			if(i%5 == 0)
			{
				m = MAX;
				g2.setColor(Color.GREEN);                             
			}
			else
			{
				g2.setColor(Color.BLUE);
			}
			
			Ellipse2D circle = new Ellipse2D.Double(x-m,y-m,2*m,2*m);
			g2.fill(circle);  
		}
	}
	
	//时间自动增加
	public void increaseTime()
	{
		seconds++;
		
		if(seconds == 60)
		{
			minutes++;
			seconds=0;
		}
		if(minutes == 60)
		{
			hours++;
			minutes=0;
		}
	}
	
	/**
	 * 
	 * @param g2
	 * @param ridian        钟表所转过的弧度
	 * @param handLength    长度
	 */
	private void drawHand(Graphics2D g2,double ridian,double handLength)
	{
		Point2D end = new Point2D.Double(RADIUS+handLength*Math.sin(ridian),
				                          RADIUS-handLength*Math.cos(ridian));
		Point2D start = new Point2D.Double(RADIUS-ADD_LENGTH*Math.sin(ridian),
				                           RADIUS+ADD_LENGTH*Math.cos(ridian));
		
		g2.draw(new Line2D.Double(start,end));    //画直线
	}
	
	private Timer t;  //定时器
	
	private GregorianCalendar calendar  ;   //日历
	private int hours;                       
	private int minutes;
	private int seconds;
	
	//private static  Point2D center;
	
	private static final int   RADIUS = 100;                  //钟表半径
	private static final double HOUR_LENGTH = 0.6*RADIUS;       //时针长度
	private static final double MINUTE_LENGTH = 0.7*RADIUS;     //分针长度 
	private static final double SECOND_LENGTH = 0.8*RADIUS;    //秒针长度
	private static final double ADD_LENGTH = 10;
	
	private static final double MAX = 3;     //绘画大点半径
	private static final double MIN = 1;     //绘画小点半径
	
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -