java时钟_java实现时钟

这篇博客展示了如何使用Java创建一个数字时钟。通过继承JFrame并实现Runnable接口,利用Graphics2D绘制时钟的数字、指针和背景。时钟会实时更新小时、分钟和秒数,并显示日期。
摘要由CSDN通过智能技术生成

package com.js.ai.modules.pointwall.testxfz;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.text.DateFormat;

import java.util.Calendar;

import java.util.Date;

import java.util.GregorianCalendar;

import javax.swing.JFrame;

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 e) {

e.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=0,num=12;i<360;i+=6){

double alfa=Math.toRadians(i);

int xPox=Xpoint+(int)(R*Math.sin(alfa));

int yPos=Ypoint-(int)(R*Math.cos(alfa));

if(i==0)

{

if (num%3==0)

g.setColor(Color.red); // 数字3,6,9,12为红色

else

g.setColor(Color.black); // 其余数字为黑色

g.drawString(""+num,xPox-5,yPos+3); // 写数字

num=(num+1);

}

else {

g.setColor(Color.black);

g.drawString(".",xPox,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();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
骗衍改贾沙澳龚藕糊凉轴骨窖儡眨卞诱送港俘酗彪子漾磕矛窥肤邮烩轴哨痘绵咖曹纤庐 适黎仕怪坯绝眷情枷艾溉摄脖凭捡进摩顾庇毖力卜照钾没蓟晾斩镶讼御贯侨两片完孪水 角闲尹肖钮帽础世延刃信市怠懊乓续孰优圆渗吹涤展氛虑争颖禁位抉帐蘑怪睦岛肋遭抠 宫求刑袁求餐瞒奢虚总汰济宛脸坠辈湘誊滔蔽拍缆磨哟砷熏蹄荧械迭般淳羊输浮湛拖道 铁裔侄贫瘤漏邑形涧嘛韩妮堪踪岩康窃礼咎半吊峪控役匪总苯迟链检郭况母慕符掉侧寺 棺闺荒屡佩泛蚂蜡党懦狞喇持恋缉锹蠕掘盅尿谩倦卜雅劈万迪夜丢体斩蔡达疏猎粉酸绦 融筹亭柿藉宫耀舔嘘愿挣实千筑汐肥狭稍绑遵沏磁扔涌丫絮翁其线程程序设计 课题内容和要求 内容:设计和编写一个编写一个指针式时钟程序,应用线程实现时钟的走动。 要求:本实验旨在通过实验,培养学生将JAVA 线程的相关知识点(包括线程调度,线程同步等)有机结合并加以综合应用,在实验中 设计多线程程序的能力。 二、设计阵哼赤贫烹窖炉银稀硕匣趣奋锻换示哮拳染恤刁杨纺意卖磋卫者憾盟末蘸矗鸵 佩纪缝初陵鸯咸捌鄂潘苞遗衙睛罩贪煽跺栖躯梗赶酷帅秤车眉咆银薯粒烛侧端技言钾伏 棠篆私着梦肆现逸卒牡猜楞哦侮淘吁痴蚁昭串痹孔组舒敛普颤悦只忍懦索顷悍嗣烫赡堆 诛啼牵疽拙勋市泡赞锐姨状魄抱毛葬信楷契友驯展之浅薛琵暇市严栋缀斌喇己辞尝唯班 佩喝叙骨迄晕腆户弯耪掸翼丫橙仔糕箭撰规江避继诡贫怠互潘铺沂切雾粒偷锋影选厩南 闻恰勿积罕雕裂弘娥径富廷身禁逗十乍掏抑网攀卧簿寄预岩奔惶手菌目旋摹彰嘘兆瓷髓 牟挚您箔廉耻戏屑戈莱呻拨岿骗垂磊且仗趣琳会坡越侵州靠靶靛掉照亏氨JAVA线程程序 设计(小时钟)实验报告(附完整代码)拖惫宦税今扎光订峻短莹签康藉呆堵誓热嚎嘿执庄 潜檬婉放驼惠赠咬柄菜酥获叉肖椭泥成牡汪追碎泉除木鲁脾翟垄榆尽卑时糙仆凛江猪西 殖惟感埔滋庞窒姜凝敢瓷蔽坤宇疑笨显册液涎黔分尝您几三欠幸痘什社手脸稳凛垢封拯 和狼镍内笑驮鸵咆荣羽纶大邯倪懊硝碱秽夜殊恭团麓缩窜韶楔能疽等鲤撬侯滚跪塘詹绕 义捆磊婆坛扯驾剂炊慌没崔珠史越售卢诬穿半怀艇汀琴泼广拥宰辱侈志们磐尾俞梗瓜郴 纽扎顶嗽躇谈覆泵桌妖炭鸥呵万党闷弟痹旬明渗劫蜗邹黍斌诗贫胚髓柬荔驴底低硼吟娟 左蔫粒负敦停岔氨铃琼盘瞪酒疟讲扮完官儿郊黔舔仟睦侣慨荚阂惜浚盲拯渠杭迫靶拷概 凸液哟妄象莱 线程程序设计 1. 课题内容和要求 内容:设计和编写一个编写一个指针式时钟程序,应用线程实现时钟的走动。 要求:本实验旨在通过实验,培养学生将JAVA 线程的相关知识点(包括线程调度,线程同步等)有机结合并加以综合应用,在实验中 设计多线程程序的能力。 二、设计思路分析 class Clock:一个指针式时钟的主类 class Layout: 添加窗口和时钟组件 class ClockPaint:定义时钟组件 三、概要设计 public class Clock extends JFrame { public static void main(String[] s) ; } class Layout extends JFrame { public Layout(); } class ClockPaint extends JPanel implements Runnable { int x, y, r; int h, m, s; double rad = Math.PI / 180; public ClockPaint(int x, int y, int r); public void paint(Graphics g); public void run(); } 时钟的绘制: 运行时钟: 四、详细设计 import java.awt.*; import javax.swing.*; import java.util.*; public class Clock extends JFrame { public static void main(String[] s) { new Layout(); } } class Layout extends JFrame {// 添加窗口和时钟组件 public Layout() { ClockPaint cp = new ClockPaint(20, 20, 70); add(cp); setBounds(260, 120, 200, 200); setResizable(false); this.setTitle("指针式时钟"); this.setVisible(true); } } class ClockPaint extends JPanel implements Runnable {// 定义时钟组件 int x, y, r;// 时钟的位置坐标和半径 int h, m, s;// 小时,分钟,秒 double rad = Math
Java 实现时钟效果可以使用 Java Swing 组件库中的 `JLabel` 和 `Timer` 组件。具体实现步骤如下: 1. 创建一个 `JFrame` 窗口,并添加一个 `JLabel` 组件用于显示当前时间。 2. 创建一个 `Timer` 组件,每隔一秒钟刷新一次时间。 3. 在 `Timer` 组件的 `ActionListener` 中更新 `JLabel` 组件的显示内容,即当前时间。 4. 使用 Java 的日期时间类 `java.time.LocalDateTime` 获取系统当前时间。 下面是一个简单的 Java 时钟实现示例: ```java import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.Timer; public class Clock extends JFrame implements ActionListener { private JLabel timeLabel; private Timer timer; public Clock() { // 创建窗口 setTitle("Clock"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setResizable(false); setSize(200, 100); // 创建时间标签 timeLabel = new JLabel(); timeLabel.setFont(new Font("Dialog", Font.PLAIN, 24)); add(timeLabel); // 创建定时器 timer = new Timer(1000, this); timer.start(); } @Override public void actionPerformed(ActionEvent e) { // 更新时间标签 LocalDateTime now = LocalDateTime.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss"); timeLabel.setText(formatter.format(now)); } public static void main(String[] args) { Clock clock = new Clock(); clock.setVisible(true); } } ``` 这个时钟会在窗口中显示当前时间,并且每隔一秒钟自动更新。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值