设计并实现一个模拟时钟功能的应用程序。程序中应显示时针、分针和秒针,并同时以数字形式显示当前时间。

实现结果:

源代码如下:

//ClockPanel.java
import javax.swing.*;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Timer;
import java.util.TimerTask;
import java.text.SimpleDateFormat;
import java.util.Locale;
import java.awt.*;
import java.awt.event.*;public class ClockPanel extends JPanel{private GregorianCalendar calendar;private JButton btn;private JButton btn2;private int currentState=8; private String zone;private int hourTemp;final int X=320, Y=240, R=120;   // 圆心坐标,半径private int xPos,yPos;private int hour,minute,second; private int xHour,yHour,xMinute,yMinute,xSecond,ySecond;//表针位置(大端)private int xHour1,yHour1,xMinute1,yMinute1,xSecond1,ySecond1;//表针位置(小端)private double a_sec,a_min ,a_hour;//角度ClockPanel() {   // 创建定时器对象Timer t = new Timer();  Task task = new Task();  t.schedule(task, 0, 1000); setLayout(new BorderLayout(10,20)); btn=new JButton("时区  上");btn2=new JButton("时区 下");btn.setBorder(BorderFactory.createRaisedBevelBorder());btn2.setBorder(BorderFactory.createRaisedBevelBorder());btn.setBackground(Color.green);btn2.setBackground(Color.green);btn.addActionListener(new ButtonListener()); btn2.addActionListener(new ButtonListener()); add(btn,BorderLayout.WEST); add(btn2,BorderLayout.EAST); }//相关事件处理private class ButtonListener implements ActionListener {public void actionPerformed(ActionEvent event) {    if (event.getSource()==btn)currentState++;if (event.getSource()==btn2)currentState--;}}public void paintComponent(Graphics g){ super.paintComponent(g); double alfa;    //所画点对应的角度Graphics2D g2d=(Graphics2D)g;BasicStroke bstroke=new BasicStroke(1.0f);BasicStroke bstroke2=new BasicStroke(2.0f);BasicStroke bstroke3=new BasicStroke(3.0f);g2d.setStroke(bstroke2);for(int i=0;i<=360;i+=6)  {alfa=Math.toRadians(i);  //角度用弧度表示xPos=X+(int)(R*Math.cos(alfa));   // x坐标yPos=Y-(int)(R*Math.sin(alfa));   // y坐标int xBegin=320+(int)(144*Math.sin(alfa));int yBegin=240-(int)(144*Math.cos(alfa));int xEnd=320+(int)(159*Math.sin(alfa));int yEnd=240-(int)(159*Math.cos(alfa));g2d.setColor(Color.BLACK);g2d.drawLine(xBegin,yBegin,xEnd,yEnd);g2d.setColor(Color.RED);switch(i){  // 写时钟数字刻度case 0: g2d.drawString("3", xPos,yPos);break;case 90: g2d.drawString("12", xPos,yPos);break;case 180: g2d.drawString("9", xPos,yPos);break;case 270: g2d.drawString("6",xPos,yPos);break;      }if(i%30==0){g2d.drawLine(xBegin,yBegin,xEnd,yEnd);}}g2d.setColor(Color.BLACK);g2d.setStroke(bstroke3);g2d.drawLine(X, Y, xHour,yHour);    // 画时针g2d.drawLine(X, Y, xHour1,yHour1);  g2d.setColor(Color.BLUE);g2d.setStroke(bstroke2);g2d.drawLine(X, Y, xMinute,yMinute);    // 画分针g2d.drawLine(X, Y, xMinute1,yMinute1);g2d.setColor(Color.RED);g2d.setStroke(bstroke);g2d.drawLine(X, Y, xSecond,ySecond);    // 画秒针g2d.drawLine(X, Y, xSecond1,ySecond1);//表盘中心点1g2d.drawOval(317,237,6,6); g2d.fillOval(317,237,6,6);//表盘中心点2g2d.setColor(Color.BLACK);g2d.drawOval(319,238,4,4); g2d.fillOval(319,238,4,4);//表盘中心圆环g2d.setColor(Color.ORANGE);g2d.drawOval(300,220,40,40); g2d.setColor(Color.black);g2d.drawString("15010140079",290,376); GregorianCalendar gre=new GregorianCalendar(); SimpleDateFormat dateforamt1=new SimpleDateFormat("yyyy年MM月dd日E");//SimpleDateFormat dateforamt2=new SimpleDateFormat("H时m分s秒");g2d.setColor(Color.black);g2d.setFont(new Font("SAN_SERIF",Font.BOLD,20)); g2d.drawString(dateforamt1.format(gre.getTime()),250,50);g2d.drawString(hour+"时"+minute+"分"+second+"秒",260,430);//时区判断if(currentState>12){currentState=-11;}else if(currentState<-11){currentState=12;}if(currentState<=12&&currentState>=1)zone="东"+currentState+"区";elsezone="西"+(1-currentState)+"区";g2d.drawString(zone,170,50); }class Task extends TimerTask {  public void run() {  calendar = new GregorianCalendar();  hourTemp=currentState>0?(currentState-8):(currentState-1);hour = calendar.get(Calendar.HOUR)+hourTemp;  minute = calendar.get(Calendar.MINUTE);  second = calendar.get(Calendar.SECOND); a_sec = second * 2 * Math.PI / 60;a_min = minute * 2 * Math.PI / 60 + a_sec / 60;a_hour = hour * 2 * Math.PI / 12 + a_min / 12;// 计算时、分、秒针的末端位置xSecond=320+(int)(110*Math.sin(a_sec));ySecond=240-(int)(110*Math.cos(a_sec));xMinute=320+(int)(90 *Math.sin(a_min));yMinute=240-(int)(90 *Math.cos(a_min));xHour=  320+(int)(70 *Math.sin(a_hour));yHour=  240-(int)(70 *Math.cos(a_hour));xSecond1=320-(int)(22*Math.sin(a_sec));ySecond1=240+(int)(22*Math.cos(a_sec));xMinute1=320-(int)(15*Math.sin(a_min));yMinute1=240+(int)(15*Math.cos(a_min));xHour1  =320-(int)(5 *Math.sin(a_hour));yHour1  =240+(int)(5 *Math.cos(a_hour));repaint();  }  }
}//
//Clock.java
import javax.swing.*;public class Clock{ public static void main(String[] args) {JFrame frame=new JFrame("Clock");    //创建图文框frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.getContentPane().add(new ClockPanel()); //添加面板frame.setVisible(true);frame.setSize(640,480);         }
}

java实现模拟时钟表盘相关推荐

  1. 【Java】动态模拟时钟

    应用名称:java动态模拟时钟 用到的知识:javaGUI,java 绘图 开发环境:win10+eclipse+jdk1.8 功能说明:通过java绘图画出一个虚拟的动态时钟 效果图: 源代码: i ...

  2. java时钟时针绘制代码,Java实现动态模拟时钟

    搜索热词 本文实例为大家分享了java动态模拟时钟的具体代码,供大家参考,具体内容如下 应用名称:java动态模拟时钟 用到的知识:javaGUI,java 绘图 开发环境:win10+eclipse ...

  3. java 模拟时钟_java模拟时钟

    本次课程设计采用时间片轮转调度算法来实现模拟进程调度任务的执行过 程. 用 Java 模拟进程调度过程,可以方便地将运行结果直观地表示出来.Java 语言 独有的多...... 本次课程设计采用时间片 ...

  4. java模拟时钟课程设计_java课程设计-时钟图形模拟

    java课程设计-时钟图形模拟 计算机与信息工程系 <高级语言程序设计>课程设计报告课 程 设 计 任 务 书专 业 通信工程 班 级 13 级四班 姓 名 张凯铭设 计 起 止 日 期设 ...

  5. java时钟课程设计,Java课程设计-时钟图形模拟

    <Java课程设计-时钟图形模拟>由会员分享,可在线阅读,更多相关<Java课程设计-时钟图形模拟(19页珍藏版)>请在人人文库网上搜索. 1.课 程 设 计 任 务 书专 业 ...

  6. java实现时钟表盘教程方法

    本文实例为大家分享了java实现时钟表盘的具体代码,供大家参考,具体内容如下 设计并实现一个模拟时钟功能的应用程序.程序中应显示时针.分针和秒针,并同时以数字形式显示当前时间. 实现结果: 源代码如下 ...

  7. Java Swing 小项目:模拟时钟/指针时钟 + 数字日期时钟 的实现

    原文链接:https://xiets.blog.csdn.net/article/details/130685267 版权声明:原创文章禁止转载 Java Swing 图形界面开发(目录) 使用 Ja ...

  8. java模拟时钟源代码_Android实现模拟时钟(简单+漂亮)--时针、分针、秒针

    前言 前不久在网上看见Android实现的模拟时钟,感觉十分有意思,这里是地址: 秒表.笔者突然对其有了兴趣,也想去实现以下自己的模拟时钟.折腾了一阵子总算是弄出来了 现在将实现方式共享出来,大家一些 ...

  9. c语言画图 钟表模拟程序,图形模拟时钟C语言课程设计

    图形模拟时钟C语言课程设计 更新时间:2017/2/2 9:03:00  浏览量:640  手机版 学号13082101182014-2015学年第二学期 <高级语言程序设计> 课程设计报 ...

  10. c语言课设报告时钟vc环境,C语言课程设计报告模拟时钟转动程序

    C语言课程设计报告模拟时钟转动程序 课程设计报告题 目 课 程 名 称 结构化程序设计课程设计 院 部 名 称 专 业 班 级 学 生 姓 名 王蕾 学 号 课程设计地点 课程设计学时 指 导 教 师 ...

最新文章

  1. 计算一个二进制数中数字“1”的个数(位运算)
  2. Python 技术篇-ffmpeg.exe的安装及配置
  3. Python--day61--Django中的app
  4. 差分约束 1:pku 1201 Intervals 2:pku 1364 King 3:hdu 1534
  5. SoundStream VS Lyra: 谷歌今年新推出的两款AI音频编解码器有何不同?
  6. linux搜索含多个字符串,使用grep搜索多个字符串
  7. 计算机基础第一章知识题库,题库第一章计算机基础知识
  8. 服务稳定性及应用防护方案
  9. DIV的边距属性在Chrome和IE中的区别
  10. linux fedora14 u盘运行,Fedora Linux系统下挂载U盘和Windows盘
  11. sap系统搭建教程_SAP系统和微信集成的系列教程之十:如何在SAP C4C系统里直接回复消息给微信用户...
  12. 职称计算机 将计算机broad_1下的e盘映射为k盘网络驱动器,[转载]职称计算机考试(网络基础)试题答案、操作(一)...
  13. 在线付费听音乐平台网站源码
  14. 唤醒手腕Python全栈工程师学习笔记(微机实验篇)
  15. 手撕coreML之yolov2 object detection物体检测(含源代码)
  16. 前端隐秘角落 - web安全的演变历程
  17. Elasticsearch学习第二篇--常用的几种搜索方式
  18. 校招群面及专业面技巧总结(适用产品等非技术岗)
  19. 刚参加完阿里面试:一面+二面+三面+HR四面,我的复盘经验总结
  20. gpb编码 c语言,ARM学习笔记--GPIO接口

热门文章

  1. 单字母密码密码分析(上)
  2. 理解Vulkan中的各种对象
  3. FS32R294JCK0MJDT功能、FS32R294KCK0MJDT特点、FS32R294KAK0MJDT雷达微控制器
  4. SQL 的各种 join 用法
  5. window10 无法使用内置管理员账户打开sticky notes 解决方法
  6. C语言编程实现Euclid GCD算法 作业
  7. 关于PHPExcel导出单元格换行的问题
  8. 白鹤芋一帆风顺花怎么养 一帆风顺花养殖方法及注意事项
  9. 【AI视野·今日CV 计算机视觉论文速览 第235期】Mon, 27 Sep 2021
  10. 2023广东海洋大学计算机考研信息汇总