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

📄 clockcanvas.java.bak

📁 一个挺漂亮的用java编的时钟
💻 BAK
字号:
import java.awt.*; 
import javax.swing.*; 
import java.util.*;
import java.util.Timer;
import java.util.Random;
import java.awt.event.*;
import java.awt.event.MouseMotionListener;

class ClockCanvas extends JPanel //clockcanvas 
{ 
	static int seconds = 0;
	private final int wild=600,length=600;
	private int cx=160,cy=65,cr=60,hr=(int)(cr/3+10),mr=hr+10,sr=mr+15;

	private int dx=0,dy=0;
	
	private Timer timer;	
	private Random Creator;

    private String c=new String("北京时间:"),tz=new String("GMT+8");
	private String time;
	private int h,m,s;
	private GregorianCalendar calendar; 

	private Color scolor=Color.black;

	public JButton magify,dwindle;
	private JLabel label;

	//构造函数 
	public ClockCanvas() 
	{ 
		Creator=new Random();
		calendar = new GregorianCalendar(TimeZone.getTimeZone(tz)); 
				//在具有默认语言环境的给定时区内构造一个基于当前时间的 GregorianCalendar。
				//GregorianCalendar类只是程序开始的时间,不会向后数。
		h=calendar.get(Calendar.HOUR);
		m=calendar.get(Calendar.MINUTE);
		s=calendar.get(Calendar.SECOND);
		time=new String(c+h+':'+m+':'+s);/**/
		seconds =  h* 60 * 60+  m* 60+ s; 
					 							
		timer = new Timer();           //计时器
		timer.schedule(new MyTask(),1,1000);

		magify=new JButton("放大");//设置按钮,,,标签
		dwindle=new JButton("缩小");
		label=new JLabel(time);
		ButtonListener listener=new ButtonListener();
		magify.addActionListener(listener);
		dwindle.addActionListener(listener);

		setLayout(new GridLayout(0,1));//布局管理器
		setBorder(BorderFactory.createEmptyBorder(0,wild,0,0));
		add(magify);
		add(dwindle);
		add(label);

		//addMouseMotionListener(new DotsListemer());   想做到鼠标拖动的效果,但不行
		addMouseListener(new DotsListemer());

		setPreferredSize(new Dimension(wild+100,length));
		setBackground(Color.cyan);
	} 

	//绘制钟面 
	public void paintComponent(Graphics g) 
	{ 
		super.paintComponent(g); 
		g.setColor(scolor);

		g.drawOval(cx-cr,cy-cr, 2*cr, 2*cr); 
		g.drawOval(cx-cr+1,cy-cr+1, 2*(cr-1), 2*(cr-1)); 
		g.drawLine(cx,cy-cr,cx,cy-sr);
		g.drawLine(cx+cr,cy,cx+sr,cy);
		g.drawLine(cx,cy+cr,cx,cy+sr);
		g.drawLine(cx-cr,cy,cx-sr,cy);
		//分离时间 
		//时针和分针都是根据秒数决定角度
		double hourAngle = 2 * Math.PI 
			* (seconds - 3 * 60 * 60) / (12 * 60 * 60); 
		double minuteAngle = 2 * Math.PI 
			* (seconds - 15 * 60) / (60 * 60); 
		double secondAngle = 2 * Math.PI 
				* (seconds - 15) / 60; 


		g.drawLine(cx, cy-1, cx + (int)(hr* Math.cos(hourAngle)), //hour  -1
					cy-1 + (int)(hr * Math.sin(hourAngle)));
		
		g.drawLine(cx, cy, cx + (int)(hr* Math.cos(hourAngle)),// hour  0
					cy + (int)(hr * Math.sin(hourAngle))); 

		g.drawLine(cx, cy+1, cx + (int)(hr* Math.cos(hourAngle)), //hour  +1
					cy+1 + (int)(hr * Math.sin(hourAngle)));
		
		g.drawLine(cx, cy-2, cx + (int)(hr* Math.cos(hourAngle)), //hour  -2
					cy-2 + (int)(hr * Math.sin(hourAngle))); 

		g.drawLine(cx, cy+2, cx + (int)(hr* Math.cos(hourAngle)), //hour  +2
					cy+2 + (int)(hr * Math.sin(hourAngle))); 

		g.drawLine(cx, cy, cx + (int)(mr* Math.cos(minuteAngle)),//minute  0
					cy + (int)(mr * Math.sin(minuteAngle))); 

		g.drawLine(cx, cy-1, cx + (int)(mr* Math.cos(minuteAngle)), //minute  -1
					cy-1 + (int)(mr * Math.sin(minuteAngle))); 

		g.drawLine(cx, cy, cx + (int)(sr* Math.cos(secondAngle)), //second
					cy + (int)(sr * Math.sin(secondAngle))); 	
					

		g.drawLine(0,length,wild,length);//画边界
		g.drawLine(wild,0,wild,length);

		label.setText(time);
	} 


	public class MyTask extends java.util.TimerTask
	{ 
      public void run()
		{
			seconds++;
			cx+=Creator.nextInt(5)+dx;
			cy+=Creator.nextInt(5)+dy;
			if(cx<=cr){cx=cr;dx=0;}
				else if(cx>=wild-cr){cx=wild-cr;dx=-5;}
				
			if(cy<=cr){cy=cr;dy=0;}
				else if(cy>=length-cr){cy=length-cr;dy=-5;}
				
			s++; 
			if (s==60) 
			{ 
				m++; 
				s=0; 
			} 

			if (m==60) 
			{ 
				h++; 
				m=0; 
			} 

			if (h==24) 
			{ 
				h=0; 
			} 

			time=new String(c+h+':'+m+':'+s);
			
			repaint();
		}
	}

	private class DotsListemer implements java.awt.event.MouseListener
           
	{
		public Point dot;
		public double dst;		
		public void mousePressed(MouseEvent e)
		{
			dot=e.getPoint();
			if((dot.x<=wild-cr||dot.x>=cr)&&(dot.y<=length-cr||dot.y>=cr))
			{
				cx=dot.x;
				cy=dot.y;
				scolor=Color.green;
				repaint();
			}
		}
		
		public void mouseClicked (MouseEvent e){}

  		public void mouseReleased (MouseEvent e)
			{scolor=Color.red;repaint();}

  		public void mouseEntered (MouseEvent e)
		{
			scolor=Color.pink;repaint();
		}
  		public void mouseExited (MouseEvent e)
		{
			scolor=Color.black;repaint();
		}

		
	}

	private class ButtonListener implements ActionListener//Button事件
	{
		public void actionPerformed(ActionEvent event)
		{
			if(event.getSource()==magify)
			{
				cr*=2;
				if(cr>=(wild+length/4))cr=150;
				hr=(int)(cr/3+10);mr=hr+10;sr=mr+15;
			}
			else if(event.getSource()==dwindle)
			{
				cr=(int)(cr/2);
				if(cr<=2)cr=2;
				hr=(int)(cr/3+10);mr=hr+10;sr=mr+15;
			}
			repaint();
		}
	}
} 

⌨️ 快捷键说明

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