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

📄 clock.java

📁 这是一个用java编写的日历
💻 JAVA
字号:
package bag2;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.geom.*;
import java.util.*;
public class 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], //用来表示秒针端点坐标的数组
          pointSY=new double[60], 
          pointMX=new double[60], //用来表示分针端点坐标的数组
          pointMY=new double[60], 
          pointHX=new double[60], //用来表示时针端点坐标的数组
          pointHY=new double[60];
   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();                     //秒针开始计时
   }
   private void initPoint(){
     width=getBounds().width;
     height=getBounds().height;
     pointSX[0]=0;                         //12点秒针位置
     pointSY[0]=-height/2*5/6;
     pointMX[0]=0;                         //12点分针位置
     pointMY[0]=-(height/2*4/5);
     pointHX[0]=0;                         //12点时针位置
     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);
             }
             else{ 
                int k=7;  
                g.setColor(Color.orange);
                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 + -