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

📄 clock.java

📁 Java程序设计实用教程源代码 本书源代码按章分别放置在不同的文件夹中,所有程序均在JDK1.6环境下编译运行正常,除了第13章需要建立ODBC数据源之外,其他程序只要有Java运行环境即可直接运行
💻 JAVA
字号:
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.Timer;
import java.text.*;


public class Clock
    extends JFrame  {
  int x, y, old_X, old_Y, r, x0, y0, w, h, ang;
  int sdo, mdo, hdo, old_M, old_H;
  final double RAD = Math.PI / 180.0;

  public Clock() {
    super("动画时钟");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(320, 360);
    setBackground(Color.white);
    setResizable(false);
    setVisible(true);
    int delay = 500;
    //窗体添加事件监听,监听秒表的触发
    ActionListener taskPerformer = new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        repaint();
      }
    };
    new Timer(delay, taskPerformer).start();
  }

  public void paint(Graphics g) {
    super.paint(g);
    Insets insets = getInsets();
    int L0 = (insets.left) / 2, T0 = (insets.top) / 2;
    int hh, mm, ss;
    h = getSize().height-40;
    //绘制圆形
    Graphics2D g2d = (Graphics2D) g;
    g2d.setStroke(new BasicStroke(3.0f));
    g2d.setColor(Color.black);
    r = h/2 - 30;
    g2d.drawOval(L0 + 30, T0 + 30, 2*r, 2*r);
    x0 = 30 + r - 5 + L0;
    y0 = 30 + r - 5 - T0;
    ang = 60;
    g2d.setColor(new Color(255,106,66));
    g2d.setFont(new Font("宋体",Font.PLAIN,15));
    for (int i = 1; i <= 12; i++) {//绘制数字1-12
      x = (int) ( (r + 10) * Math.cos(RAD * ang) + x0);
      y = (int) ( (r + 10) * Math.sin(RAD * ang) + y0);
      g2d.drawString("" + i, x, h - y);
      ang -= 30;
    }
    x0 = 30 + r + L0;
    y0 = 30 + r + T0;
    //获取时间
    Calendar now = Calendar.getInstance();
    hh = now.get(Calendar.HOUR_OF_DAY); //小时
    mm = now.get(Calendar.MINUTE); //分钟
    ss = now.get(Calendar.SECOND); // 秒
    //计算时间和图形的关系
    sdo = 90 - ss * 6;
    mdo = 90 - mm * 6;
    hdo = 90 - hh * 30 - mm / 2;
    //绘制秒针
    g2d.setColor(Color.red);
    x = (int) ( (r - 8) * Math.cos(RAD * sdo) + x0);
    y = (int) ( (r - 8) * Math.sin(RAD * sdo) + y0) - 2 * T0;
    g2d.drawLine(x0, y0, x, (h - y));

    old_X = x;
    old_Y = y;    
    line(g2d, mdo, (int)(r * 0.7), Color.green);//绘制分针    
    line(g2d, hdo, (int)(r * 0.6), Color.blue);//绘制时针
    SimpleDateFormat fmat = new SimpleDateFormat("s",Locale.getDefault());
    fmat.applyPattern("yyyy年MM月DD日 EEE  HH:mm:ss ");
    g.drawString(fmat.format(new Date()), L0, h+25 );
  } 

  public void line(Graphics g, int t, int len, Color c) {
    int[] xp = new int[4];
    int[] yp = new int[4];
    xp[0] = x0;
    yp[0] = y0;
    xp[1] = (int) ( (len - 10) * Math.cos(RAD * (t - 4)) + x0);
    yp[1] = h - (int) ( (len - 10) * Math.sin(RAD * (t - 4)) + y0);
    xp[2] = (int) (len * Math.cos(RAD * t) + x0);
    yp[2] = h - (int) (len * Math.sin(RAD * t) + y0);
    xp[3] = (int) ( (len - 10) * Math.cos(RAD * (t + 4)) + x0);
    yp[3] = h - (int) ( (len - 10) * Math.sin(RAD * (t + 4)) + y0);
    g.setColor(c);
    g.fillPolygon(xp, yp, 4);
  }
  public static void main(String args[]) {
    new Clock();
  }
}

⌨️ 快捷键说明

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