JAVA时钟

本文介绍了一个使用Java Swing实现的数字时钟程序。该程序能够实时显示当前时间,并且具备时、分、秒针的模拟显示功能。同时,程序还显示了日期信息,并通过线程实现了每秒更新界面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



package TASK;

import java.awt.*;
import java.text.DateFormat;
import java.util.*;
import javax.swing.*;

//数字时钟
public class ClockDemo extends JFrame implements Runnable {
 Thread clock;
 final int Xpoint = 180;
 final int Ypoint = 180;
 final int R = 80;
 int xHour = 0, yHour = 0, xSecond = 0, ySecond = 0, xMin = 0, yMin = 0;

 public ClockDemo() {
  super("数字时钟"); // 调用父类构造函数
  setFont(new Font("宋体", Font.BOLD, 20)); // 设置时钟的显示字体
  start(); // 开始进程
  setSize(360, 360); // 设置窗口尺寸
  setVisible(true); // 窗口可视
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭窗口时退出程序
 }

 public void start() { // 开始进程
  if (clock == null)// 如果进程为空值
  {
   clock = new Thread(this); // 实例化进程
   clock.start(); // 开始进程
  }
 }

 public void run()// 运行进程
 {
  while (clock != null) {
   repaint(); // 调用paint方法重绘界面
   try {
    Thread.sleep(1000); // 线程暂停一秒(1000毫秒)
   } catch (InterruptedException ex) {
    ex.printStackTrace(); // 输出出错信息
   }
  }
 }

 public void stop()// 停止进程
 {
  clock = null;
 }

 public void paint(Graphics g)// 重载组件的paint方法
 {
  Graphics2D g2 = (Graphics2D) g; // 得到Graphics2D对象
  DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL);
  Calendar now = new GregorianCalendar(); // 实例化日历对象
  now.setTime(new Date());// dateFormat.format(now.getTime())
  String timeInfo = ""; // 输出信息
  int hour = now.get(Calendar.HOUR_OF_DAY); // 得到小时数
  int minute = now.get(Calendar.MINUTE); // 得到分数
  int second = now.get(Calendar.SECOND); // 得到秒数
  if (hour <= 9)
   timeInfo += "0" + hour + ":"; // 格式化输出
  else
   timeInfo += hour + ":";
  if (minute <= 9)
   timeInfo += "0" + minute + ":";
  else
   timeInfo += minute + ":";
  if (second <= 9)
   timeInfo += "0" + second;
  else
   timeInfo += second;
  g.setColor(Color.yellow); // 设置当前颜色为黄色
  Dimension dim = getSize(); // 得到窗口尺寸
  g.fillRect(0, 0, dim.width, dim.height); // 填充背景色为黄色
  g.setColor(Color.red); // 设置当前颜色为红色
  g.drawString(timeInfo, 130, 340); // 显示时间字符串
  g.setColor(Color.green);
  g.drawString(dateFormat.format(now.getTime()), 20, 60);
  g.setColor(Color.black);
  g.setFont(new Font("SAN_SERIF", Font.BOLD, 15));
  for (int i = 1, num = 3; i <= 60; i++) {
   // 转换成角度
   double alfa = Math.toRadians(i * 6);
   int xPos = Xpoint + (int) (R * Math.sin(alfa));
   int yPos = Ypoint - (int) (R * Math.cos(alfa));
   if (i % 15 == 0) {
    g.setColor(Color.red); // 数字3,6,9,12为红色
    g.drawString("" + num, xPos - 5, yPos + 3); // 写数字
    num += 3;
   } else {
    g.setColor(Color.black);
    g.drawString(".", xPos, yPos);
   }
  }
  // 画中心圆点
  g.setColor(Color.black);
  g.fillOval(Xpoint - 4, Ypoint - 4, 8, 8);
  // 画秒针
  xSecond = (int) (Xpoint + (R - 10)
    * Math.sin(second * (2 * Math.PI / 60)));
  ySecond = (int) (Ypoint - (R - 10)
    * Math.cos(second * (2 * Math.PI / 60)));
  g.setColor(Color.red);
  g.drawLine(Xpoint, Ypoint, xSecond, ySecond);
  // 画分针
  xMin = (int) (Xpoint + (R - 20)
    * Math.sin((minute + second / 60) * (2 * Math.PI / 60)));
  yMin = (int) (Ypoint - (R - 20)
    * Math.cos((minute + second / 60) * (2 * Math.PI / 60)));
  g.setColor(Color.red);
  g.drawLine(Xpoint, Ypoint, xMin, yMin);
  // 画时针
  xHour = (int) (Xpoint + (R - 30)
    * Math.sin((hour + minute / 60 + second / 60 / 60)
      * (2 * Math.PI / 12)));
  yHour = (int) (Ypoint - (R - 30)
    * Math.cos((hour + minute / 60 + second / 60 / 60)
      * (2 * Math.PI / 12)));
  g.setColor(Color.red);
  g.drawLine(Xpoint, Ypoint, xHour, yHour);
 }

 public static void main(String[] args) {
  new ClockDemo();
 }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值