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

📄 clockpanel.java

📁 Java程序模拟时钟以及其时钟的各种功能源代码
💻 JAVA
字号:
import java.awt.BasicStroke;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Stroke;
import java.awt.image.BufferedImage;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Rectangle;
import javax.swing.JLabel;
import java.awt.Dimension ;
import java.awt.BorderLayout ;
import java.awt.FlowLayout ;
import javax.swing.JButton;
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent;
import javax.swing.*;



public class ClockPanel extends JPanel
{
	private Canvas m_DrawPanel = new Canvas();
	
	private Graphics g = null;
	private Graphics gBuf = null;
	
	private int m_CenterX = 450 / 2;
	private int m_CenterY = 450 / 2;
	
	private int m_Hour;
	private int m_Minute;
	private int m_Second;
	
	private static int Hour = 0 ;
	private static int Minute = 0 ;
	private static int Second = 0 ;
	
	private JButton Setbutton = new JButton( "设置时间" );
	
	private double m_dHourAngle;
	private double m_dMinuteAngle;
	private double m_dSecondAngle;
	
	BasicStroke m_SecondStoke = new BasicStroke(2);
	BasicStroke m_MinuteStoke = new BasicStroke(3);
	BasicStroke m_HourStoke = new BasicStroke(5);

	private Font font = new Font("Serif", Font.BOLD, 30);
	private Font oldFont = null;
	private BufferedImage m_BufImage = new BufferedImage(500,500,BufferedImage.TYPE_INT_ARGB);
	
	private GregorianCalendar m_GCalendar = new GregorianCalendar(Locale.CHINESE);
	
	
	public ClockPanel()
	{  
		this.initFrame();
	}
	
	
	private void initFrame()
	{
		
		this.setLayout(null);
		setSize(600,600);
		this.m_DrawPanel.setSize(500, 500);
		this.add(this.m_DrawPanel);

	    Setbutton.setBounds(180,500,100,30);
	    this.add(Setbutton);
	    validate();
		
		Setbutton.addActionListener(new ActionListener() 
        { 
         public void actionPerformed (ActionEvent e) 
         { 
           Setbutton_actionPerformed(e); 
         } 
        });
		Thread t = new Thread(new UpdateThread());
		t.setDaemon(true);
		t.start();
	}
	
	public void setMainG()
	{
		g = m_DrawPanel.getGraphics();
		gBuf = m_BufImage.getGraphics();
		
	}
	
	private void updateDrawClock()
	{
		if(gBuf != null)
		{
			Color c = gBuf.getColor();
			gBuf.setColor(this.getBackground());
			gBuf.fillRect(0, 0, 500, 500);
			gBuf.setColor(c);
			this.drawClock();
		}
	}	
	
	public void drawClock()
	{
		if(g != null)
		{
			Graphics2D g2D = (Graphics2D)gBuf;
			g2D.setColor(Color.black);
			g2D.fillOval(m_CenterX-10, m_CenterY-10, 20, 20);
			Stroke sOld = g2D.getStroke();
			BasicStroke dotted = new BasicStroke(5, BasicStroke.CAP_ROUND, 
		              BasicStroke.JOIN_ROUND, 2, new float[]{3,10}, 0);
			Color cOld = g2D.getColor();
			g2D.setColor(Color.black);
			g2D.setStroke(dotted);
			g2D.drawOval(100, 100, 250, 250);
			oldFont = g2D.getFont();
			
			g2D.setFont(font);
			g2D.setColor(Color.pink);
			g2D.drawString("12", 210,105);
			g2D.drawString("3", 345, 233);
			g2D.drawString("6", 218, 355);
			g2D.drawString("9", 95, 233);
			
			g2D.setFont(new Font("Serif", Font.BOLD, 30));
			g2D.setColor(Color.GREEN);
			g2D.drawString("JAVA模拟时钟", 120, 310);
			
			this.m_GCalendar.setTime(new Date());
		    
	     	int secondSum = (this.m_GCalendar.get(Calendar.HOUR_OF_DAY)+Hour)*60*60+
			(this.m_GCalendar.get(Calendar.MINUTE)+Minute)*60+
			(this.m_GCalendar.get(Calendar.SECOND)+Second);
				
			this.m_dHourAngle = 2 * Math.PI * (secondSum - 3 * 60 * 60) / (12 * 60 * 60);
			this.m_dMinuteAngle = 2 * Math.PI * (secondSum - 15 * 60) / (60 * 60);
			this.m_dSecondAngle = 2 * Math.PI * (secondSum - 15) / 60;

			g2D.setStroke(m_SecondStoke);
			g2D.setColor(Color.red);
			g2D.drawLine(m_CenterX,
					m_CenterY,
					m_CenterX + (int)(115*Math.cos(m_dSecondAngle)),
					m_CenterX + (int)(115*Math.sin(m_dSecondAngle)));		
			g2D.setStroke(m_MinuteStoke);
			g2D.setColor(Color.cyan);
			g2D.drawLine(m_CenterX,
					m_CenterY,
					m_CenterX + (int)(95*Math.cos(m_dMinuteAngle)),
					m_CenterX + (int)(95*Math.sin(m_dMinuteAngle)));
			g2D.setStroke(m_HourStoke);
			g2D.setColor(Color.magenta);
			g2D.drawLine(m_CenterX,
					m_CenterY,
					m_CenterX + (int)(75*Math.cos(m_dHourAngle)),
					m_CenterX + (int)(75*Math.sin(m_dHourAngle)));
			g2D.setFont(new Font("Serif", Font.BOLD, 25));
			g2D.setColor(Color.blue);
			g2D.drawString(this.m_GCalendar.get(Calendar.YEAR) + "-"
					+ this.m_GCalendar.get(Calendar.MONTH) + "-"
					+ this.m_GCalendar.get(Calendar.DATE) + "      " 
					+ (this.m_GCalendar.get(Calendar.HOUR_OF_DAY) +Hour) + ":"
					+ (this.m_GCalendar.get(Calendar.MINUTE)+Minute) + ":"
					+ (this.m_GCalendar.get(Calendar.SECOND)+ Second)
					, 110, 390);	
			g2D.setFont(oldFont);
			g2D.setStroke(sOld);
			g2D.setColor(cOld);
				
		}
		g.drawImage(m_BufImage, 0, 0, this);
	}
	
	class UpdateThread implements Runnable
	{
		public void run()
		{
			while(true)
			{   
				updateDrawClock();
				try
				{
					Thread.sleep(1000);
				} catch (InterruptedException e)
				{
					e.printStackTrace();
				}	
			}
		}
	}
	
	
   public void Setbutton_actionPerformed(ActionEvent e)
   { 
      int hour1 , minute1 ,second1 ; 
     String time ; 
     time  = JOptionPane.showInputDialog( "请输入设置时间(24小时制),输入格式为:##:##:##" ) ;
     
     if( time.length() !=8 )
       {
       	JOptionPane.showMessageDialog( null ,"输入时间格式不正确,请重新输入!!" ,"Warning" ,JOptionPane.WARNING_MESSAGE) ;
       }
     else
     {
        String s1 = time.substring( 0 , 2 ) ;
        String s2 = time.substring( 3 , 5 ) ;
        String s3 = time.substring( 6 ) ;
     
        hour1 =  Integer.parseInt(s1) ;
        minute1 =  Integer.parseInt(s2) ;
        second1 =  Integer.parseInt(s3) ;  
     
       if( hour1>=0&&hour1<=23&&minute1>=0&&minute1<=59&&second1>=0&&second1<=59 )
       {
         Hour = hour1 -  this.m_GCalendar.get(Calendar.HOUR_OF_DAY) ;
         Second = second1 - this.m_GCalendar.get(Calendar.SECOND) ;
         Minute = minute1 - this.m_GCalendar.get(Calendar.MINUTE) ;
       } 
       else
       {
      	 JOptionPane.showMessageDialog( null ,"输入时间不正确,请重新输入!!" ,"Warning" ,JOptionPane.WARNING_MESSAGE) ;
       }
      }
   } 
	
	public static void main(String[] args)
	{
		JFrame mainFrame = new JFrame();
		mainFrame.setSize(500, 600);
		ClockPanel cp = new ClockPanel();
		mainFrame.getContentPane().add(cp);
		mainFrame.setVisible(true);
		cp.setMainG();
		mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}		
}

⌨️ 快捷键说明

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