Java实现动态模拟时钟
作者:不能吃的坚果 发布时间:2022-07-25 17:35:25
标签:java,时钟
本文实例为大家分享了java动态模拟时钟的具体代码,供大家参考,具体内容如下
应用名称:java动态模拟时钟
用到的知识:javaGUI,java 绘图
开发环境:win10+eclipse+jdk1.8
功能说明:通过java绘图画出一个虚拟的动态时钟
效果图:
源代码:
import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.lang.Thread;
import java.text.DecimalFormat;
public class StillClock extends JPanel {
/**
* @param args
*/
private int hour;
private int minute;
private int second;
//构造函数
public StillClock() {
setCurrentTime();
}
//返回小时
public int getHour() {
return hour;
}
public int getMinute() {
return minute;
}
public int getSecond() {
return second;
}
//绘制时钟
protected void paintComponent(Graphics g) {
super.paintComponent(g);
//初始化
int clockRadius = (int)(Math.min(getWidth(), getHeight()) * 0.8 * 0.5);
int xCenter = getWidth() / 2;
int yCenter = getHeight() / 2;
//画圆
g.setColor(Color.black);
g.drawOval(xCenter - clockRadius, yCenter - clockRadius, 2 * clockRadius, 2 * clockRadius);
g.drawString("12", xCenter - 5, yCenter - clockRadius + 15);
g.drawString("9", xCenter - clockRadius + 3, yCenter + 5);
g.drawString("3", xCenter + clockRadius - 10, yCenter + 3);
g.drawString("6", xCenter - 3, yCenter + clockRadius - 3);
//画秒针
int sLength = (int)(clockRadius * 0.8);
int xSecond = (int)(xCenter + sLength * Math.sin(second * (2 * Math.PI / 60)));
int ySecond = (int)(yCenter - sLength * Math.cos(second * (2 * Math.PI / 60)));
g.setColor(Color.red);
g.drawLine(xCenter, yCenter, xSecond, ySecond);
//画分针
int mLenth = (int)(clockRadius * 0.65);
int xMinute = (int)(xCenter + mLenth * Math.sin(minute * (2 * Math.PI / 60)));
int yMinute = (int)(xCenter - mLenth * Math.cos(minute * (2 * Math.PI / 60)));
g.setColor(Color.blue);
g.drawLine(xCenter, yCenter, xMinute, yMinute);
//画时针
int hLength = (int)(clockRadius * 0.5);
int xHour = (int)(xCenter + hLength * Math.sin((hour % 12 + minute / 60.0) * (2 * Math.PI / 12)));
int yHour = (int)(yCenter - hLength * Math.cos((hour % 12 + minute / 60.0) * (2 * Math.PI / 12)));
g.setColor(Color.green);
g.drawLine(xCenter, yCenter, xHour, yHour);
//画数字时钟
g.setColor(Color.black);
DecimalFormat s=new DecimalFormat("00");
g.drawString(s.format(getHour()) + ":" + s.format(getMinute()) + ":" + s.format(getSecond()), xCenter - 22, yCenter - clockRadius - 15);
}
public void setCurrentTime() {
Calendar calendar = new GregorianCalendar();
this.hour = calendar.get(Calendar.HOUR_OF_DAY);
this.minute = calendar.get(Calendar.MINUTE);
this.second = calendar.get(Calendar.SECOND);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frame = new JFrame("DiaplayClock");
frame.setResizable(false);
frame.setTitle("DiaplayClock");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300,350);
frame.setVisible(true);
while(true) {
StillClock clock = new StillClock();
frame.getContentPane().add(clock);
clock.setVisible(true);
frame.validate();
try {
Thread.sleep(1000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
clock.setVisible(false);
frame.remove(clock);
clock = null;
frame.validate();
}
}
}
来源:https://blog.csdn.net/C_jian/article/details/50527895


猜你喜欢
- springboot+spring data jpa实现新增及批量新增spring data jpa (以下简称jpa)。这个orm其实和m
- 本文实例讲述了C#实现的阴历阳历互相转化类。分享给大家供大家参考,具体如下:最近郁闷地发现网上现有的相当一部分万年历上干支纪年的算法都是错误
- 一、什么是IO流输入流和输出流。输入流:数据从数据源(文件)到程序(内存)的路径输出流:数据从程序(内存)到数据源(文件)的路径二、常用的文
- 一、创建Config配置中心项目1.添加依赖 <dependency> <groupId>org.sp
- 经常进行图形界面设计的编程者肯定知道,控件在设计的时候才能随意拖动,运行的时候就不能拖动了.你肯定会问:运行时能随意拖动控件吗?答案是肯定的
- Swagger是一款遵循 Restful 风格的接口文档开发神器,支持基于 API 自动生成接口文档,接口文档始终与 API 保持同步,不再
- 为了追求更好的用户体验,有时候我们需要一个类似心跳一样跳动着的控件来吸引用户的注意力,这是一个小小的优化需求,但是在 Flutter 里动画
- 上一篇文章中主要讲了GridView的简单应用,以网格的形式展示了一些图片,对于图片也有点击监听操作。但是,如果我们在浏览图片的时候需要一些
- 该着色方法一句着色图层中要素类的某个数值字段的属性值,按这个属性值为每种不同值得要素单独分配一种显示符号样式。关键在于获取该字段所有要素的唯
- 为了保持类型的安全性,默认情况下 C# 是不支持指针的,但是如果使用 unsafe 关键字来修饰类或类中的成员,这样的类或类中成员就会被视为
- 主线程和子线程的区别每个线程都有一个唯一标示符,来区分线程中的主次关系的说法。 线程唯一标示符:Thread.CurrentThread.M
- Java非法字符: ‘\ufeff‘Java中项目启动出现 非法字符: '\ufeff
- GradientTextViewGithub点我一个非常好用的库,使用kotlin实现,用于设置TexView的字体 渐变颜色、渐变方向 和
- 概述在使用maven进行Java项目的开发过程中,难免会有些公共的私有库,这些库是不太方便放到中央仓库的,可以通过Nexus搭建一个私有仓库
- 1.SpringCache的概念首先我们知道jpa,jdbc这些东西都是一些规范,比如jdbc,要要连接到数据库,都是需要用到数据库连接,预
- 程序目的从java字节码层理解,为何i = i++后,结果是+1之前的数值。而i=++i后,结果是+1之后的值。关键指令iload_<
- 第1部分 ArrayList介绍ArrayList简介ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它的容量
- 介绍Apache Kafka 是分布式发布-订阅消息系统,在 kafka官网上对 kafka 的定义:一个分布式发布-订阅消息传递系统。 它
- 本文实例讲述了Java Lambda表达式与匿名内部类的联系和区别。分享给大家供大家参考,具体如下:一 点睛Lambda表达式与匿名内部类存
- 一:对象,JavaBean,SpringBean的区别1.什么是JavaBeanjavaBean要求所有属性为私有,该类必须有一个公共无参构