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

📄 clocktest.java

📁 JAVA写的时钟小程序
💻 JAVA
字号:
import java.awt.*;
import javax.swing.*;
import java.awt.geom.*;
import java.awt.Color.*;
import java.util.Date;
import java.awt.event.*;
import java.text.*;


public class ClockTest
{
	public static void main(String[] args)
	{
		EventQueue.invokeLater(new Runnable()
			{
				public void run()
				{
					ClockFrame frame=new ClockFrame();
					frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
					frame.setVisible(true);
				}
			});
	}
}
class ClockFrame extends JFrame
{
	public ClockFrame()
	{
		setTitle("Display Clock");//设置标题为Display Clock
		setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
		//add panel to frame
		ClockComponent component =new ClockComponent();
		add(component);
	}
	public static final int DEFAULT_WIDTH=400;
	public static final int DEFAULT_HEIGHT=420;
}

class ClockComponent extends JComponent
{
	public void ClockComponent()
	{
		   Timer timer=new Timer(5000,new MyListener());//1000毫秒触发一次
	       timer.start();

	}
	public void paintComponent(Graphics g)
	{
		Graphics2D g2=(Graphics2D) g;

		//先画出钟的外圆circle1
		Ellipse2D circle1=new Ellipse2D.Double();
		circle1.setFrameFromCenter(200,200,300,300);
		g2.draw(circle1);
		//返回circle1外接矩形的左上角的横纵座标(x1,y1)
		double x1=circle1.getMinX();
		double y1=circle1.getMinY();

		Arc2D[] arc1=new Arc2D[12];
		Point2D[] point1=new Point2D[12];

		//定义与钟边缘为同心的圆circle2,并且circle2与circle1的半径差是整5分钟时的刻度线的长度
		Ellipse2D circle2=new Ellipse2D.Double();
		circle2.setFrameFromCenter(200,200,290,290);
		Arc2D[] arc2=new Arc2D[12];
		Point2D[] point2=new Point2D[12];
		//返回circle2外接矩形的左上角的横纵座标(x1,y1)
		double x2=circle2.getMinX();
		double y2=circle2.getMinY();

		//定义与钟边缘为同心的圆circle3,并且circle3与circle1的半径差是1分钟时的刻度线的长度
		Ellipse2D circle3=new Ellipse2D.Double();
		circle3.setFrameFromCenter(200,200,295,295);

		Arc2D[] arc3=new Arc2D[60];
		Point2D[] point3=new Point2D[60];

		Arc2D[] arc4=new Arc2D[60];
		Point2D[] point4=new Point2D[60];
		//返回circle3外接矩形的左上角的横纵座标(x1,y1)
		double x3=circle3.getMinX();
		double y3=circle3.getMinY();

		Line2D[] line1=new Line2D[12];//用来装每隔五分钟刻度线
		Line2D[] line2=new Line2D[60];//用来装每一分钟的刻度线

		//用红色画出稍长些的刻度线,每五分钟一条的,共12条
		g2.setColor(Color.red);
		for(int i=0;i<12;i++)
		{
			//在钟盘circle1上分出相等的12段弧,并返回12条弧的起点,这样确定了每5分钟时刻度线的外侧点
			arc1[i]=new Arc2D.Double(x1,y1,200,200,30*i,30,Arc2D.OPEN );
			point1[i]=arc1[i].getStartPoint();

			//在钟盘circle2上分出相等的12段弧,并返回12条弧的起点,这样确定了每5分钟时刻度线的内侧点
			arc2[i]=new Arc2D.Double(x2,y2,180,180,30*i,30,Arc2D.OPEN);
			point2[i]=arc2[i].getStartPoint();

			//利用已确定的五分钟刻度线的内外侧点,画出5分钟时的刻度线
			line1[i]=new Line2D.Double(point1[i],point2[i]);
			g2.draw(line1[i]);

		}

		//画出稍短的刻度线,每一分钟一条,空60条
		for(int i=0;i<60;i++)
		{
			//在钟盘circle1上分出相等的60段弧,并返回60条弧的起点,这样确定了每1分钟时刻度线的外侧点
			arc3[i]=new Arc2D.Double(x1,y1,200,200,6*i+90,6,Arc2D.OPEN );
			point3[i]=arc3[i].getStartPoint();

			//在钟盘circle3上分出相等的60段弧,并返回60条弧的起点,这样确定了每1分钟时刻度线的内侧点
			arc4[i]=new Arc2D.Double(x3,y3,190,190,6*i+90,6,Arc2D.OPEN);
			point4[i]=arc4[i].getStartPoint();

			//利用已确定的一分钟刻度线的内外侧点,画出每一分钟时的刻度线
			line2[i]=new Line2D.Double(point3[i],point4[i]);
			g2.draw(line2[i]);

		}
	 Date time=new Date();
     SimpleDateFormat h=new SimpleDateFormat("hh");
     int hh=Integer.parseInt(h.format(time));
     SimpleDateFormat m=new SimpleDateFormat("mm");
     int mm=Integer.parseInt(m.format(time));
     SimpleDateFormat s=new SimpleDateFormat("ss");
     int ss=Integer.parseInt(s.format(time));


		//用来画钟表针的线
		Line2D line4=new Line2D.Double(new Point2D.Double(200,200),point3[12-hh]);
		Line2D line5=new Line2D.Double(new Point2D.Double(200,200),point3[60-mm]);
		Line2D line6=new Line2D.Double(new Point2D.Double(200,200),point1[60-ss]);
		//画红色的表针部分
		g2.setPaint(Color.red);
		g2.draw(line6);
		//画蓝色的表针部分
		g2.setPaint(Color.blue);
		g2.draw(line5);

		//画绿色的表针部分
		g2.setPaint(Color.green);
		g2.draw(line4);
		//添加刻度的数字
		g2.setPaint(Color.black);
		g2.drawString("3",305,205);
		g2.drawString("9",90,205);
		g2.drawString("12",195,95);
		g2.drawString("6",198,315);

		g2.setPaint(Color.red);
		g2.drawString("Hour:"+hh+" Minute:"+mm+"Second:"+ss,130,350);

	}
 	 class MyListener implements ActionListener
  	 {
        	 public void actionPerformed(ActionEvent event)
      		 {
       	 	 	repaint();
       		}
  	 }


}

⌨️ 快捷键说明

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