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

📄 clock.java

📁 一个java编写的能实现动态走动的时钟代码
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.geom.*;
import java.util.*;
public class Clock extends Frame
{
	Clock()
	{
		Music_Clock clock = new Music_Clock();
		setTitle("音乐日历时针");
		add("Center",clock);
		
		setSize(800,500);
		setVisible(true);
	}
	
	public static void main(String[] args)
	{
		
		
		new Clock();
	}
}

 class Music_Clock extends JPanel implements ActionListener
 {
 	Date date;
 	javax.swing.Timer secondTime;
 	int hour,munite,second;
 	Line2D secondLine,muniteLine,hourLine;
 	int a,b,c,width,height;
 	
 	double pointSX[] = new double[60]; //表示秒钟端点X坐标的数组
 	double pointSY[] = new double[60]; //表示秒钟端点Y坐标的数组
 	double pointMX[] = new double[60];
 	double pointMY[] = new double[60];
 	double pointHX[] = new double[60];
 	double pointHY[] = new double[60];
 	
 	public  Music_Clock()
 	{
 		setBackground(Color.cyan);
 		initPoint();
 		secondTime = new javax.swing.Timer(1000,this);
 		secondLine = new Line2D.Double(0,0,0,0);
 		muniteLine = new Line2D.Double(0,0,0,0);
 		hourLine = new Line2D.Double(0,0,0,0);
 		secondTime.start();
 		
 		//secondTime.addActionListener(this);
 		//setVisible(true);
 	}
 	
 	private void initPoint()
 	{
 		width = getBounds().width;
 		height = getBounds().height;
 		
 		//12点秒钟的位置
 		pointSX[0] = 0; 
 		pointSY[0] = -height/2*5/6;
 		
 		//12点分针的位置
 		pointMX[0] = 0;
 		pointMY[0] = -(height/2*4/5);
 		
 		//12点时针的位置
 		pointHX[0] = 0;
 		pointHY[0] = -(height/2*2/3);
 		
 		double angle = 6*Math.PI/180; //刻度为6度
 		
 		for(int i = 0;i<59;i++)  //计算数组中的坐标
 		{
 			pointSX[i+1] = pointSX[i]*Math.cos(angle)-Math.sin(angle)*pointSY[i];
 			pointSY[i+1] = pointSY[i]*Math.cos(angle)+pointSX[i]*Math.sin(angle);
 			pointMX[i+1] = pointMX[i]*Math.cos(angle)-Math.sin(angle)*pointMY[i];
 			pointMY[i+1] = pointMY[i]*Math.cos(angle)+pointMX[i]*Math.sin(angle);
 			pointHX[i+1] = pointHX[i]*Math.cos(angle)-Math.sin(angle)*pointHY[i];
 			pointHY[i+1] = pointHY[i]*Math.cos(angle)+pointHX[i]*Math.sin(angle);
 		}
 		
 		for(int i = 0;i<60;i++)
 		{
 			pointSX[i] = pointSX[i]+width/2; //坐标平移
 			pointSY[i] = pointSY[i]+height/2;
 			pointMX[i] = pointMX[i]+width/2;
 			pointMY[i] = pointMY[i]+height/2;
 			pointHX[i] = pointHX[i]+width/2;
 			pointHY[i] = pointHY[i]+height/2;
 		}
 	}
 	
 	public void paintComponent(Graphics g)
 	{
 		super.paintComponent(g);
 		initPoint();
 		
 		for(int i = 0;i<60;i++) //绘制表盘上的刻度线
 		{
 			int m = (int)pointSX[i];
 			int n = (int)pointSY[i];
 			if(i%5 == 0)
 			{
 				if(i==0||i==15||i==30||i==45)
 				{
 					int k = 10;
 					g.setColor(Color.orange);
 					g.fillOval(m-k/2,n-k/2,k,k);
 					
 					/*g.drawString("9",m-k/2,n-k/2);
 					g.drawString("3",m-k/2,n-k/2);
			        g.drawString("12",m-k/2,n-k/2);
			        g.drawString("6",m-k/2,n-k/2);*/
 				}
 				else
 				{
 					int k = 7;
 					g.setColor(Color.red);
 					g.fillOval(m-k/2,n-k/2,k,k);
 				}
 			}
 			else
 			{
 				int k = 2;
 				g.setColor(Color.black);
 				g.fillOval(m-k/2,n-k/2,k,k);
 			}
 		}
 		g.fillOval(width/2-5,height/2-5,10,10); //表中心的实心圆
 		Graphics2D g_2d = (Graphics2D)g;
 		g_2d.setColor(Color.red);
 		g_2d.draw(secondLine);
 	    BasicStroke bs = new BasicStroke(2f,BasicStroke.CAP_ROUND,BasicStroke.JOIN_MITER);
 	    g_2d.setStroke(bs);
 	    g_2d.setColor(Color.blue);
 	    g_2d.draw(muniteLine);
 	    
 	    bs = new BasicStroke(4f,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER);
 	    g_2d.setStroke(bs);
 	    g_2d.setColor(Color.orange);
 	    g_2d.draw(hourLine);
 	}
 	
 	public void actionPerformed(ActionEvent e)
 	{
 		if(e.getSource() == secondTime)
 		{
 			date = new Date();
 			String s = date.toString();
 			hour = Integer.parseInt(s.substring(11,13));
 			munite = Integer.parseInt(s.substring(14,16));
 			second = Integer.parseInt(s.substring(17,19));  //获取时间中的秒
 			int h = hour%12;
 			a = second; //秒钟端点坐标
 			b = munite;
 			c = h*5+munite/12;
 			secondLine.setLine(width/2,height/2,(int)pointSX[a],(int)pointSY[a]);
 			muniteLine.setLine(width/2,height/2,(int)pointMX[b],(int)pointMY[b]);
 			hourLine.setLine(width/2,height/2,(int)pointHX[c],(int)pointHY[c]);
 			repaint();
 		}
 	}
 	
 }

⌨️ 快捷键说明

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