JAVA时钟程序

合集下载

java雪花算法时钟回拨问题与应对方案

java雪花算法时钟回拨问题与应对方案

Java雪花算法时钟回拨问题与应对方案1.引言在分布式系统中,唯一标识生成对于数据的一致性和正确性至关重要。

为了满足需求,雪花算法应运而生。

然而,雪花算法在应对时钟回拨问题上存在一些挑战。

本文将介绍Ja va雪花算法的原理,详细探讨时钟回拨问题的本质,并提供相应的应对方案。

2.雪花算法简介雪花算法是一种分布式唯一标识生成算法,能够在分布式系统中生成全局唯一的64位标识。

它的结构如下所示:```063+-------------------------------------------------+|t im es ta mp|w or ker I D|se qu en ce|+-------------------------------------------------+```其中,t im es ta mp为时间戳,占用41位,wo rk er ID为工作机器I D,占用10位,se qu enc e为序列号,占用12位。

通过这种结构,雪花算法可以在有序性、唯一性和可读性上取得良好平衡。

3.时钟回拨问题的本质时钟回拨是指在单机或分布式环境中,时间源突然发生向后调整,导致时间戳发生回拨。

在雪花算法中,时钟回拨问题会导致生成的标识存在重复或无序的情况。

时钟回拨问题通常出现在以下情况下:-系统时间同步不准确:分布式系统中的机器时间没有得到严格同步,导致某台机器的时间与其他机器存在较大差异。

-系统时间误设置:系统管理员或用户在误操作中调整了系统时间,导致时间回拨。

4.时钟回拨问题的影响时钟回拨问题可能会导致以下严重后果:-标识重复:由于时间戳发生回拨,之前生成的标识可能会被重新生成,导致标识重复。

-标识无序:时钟回拨会打破时间戳的递增性,导致生成的标识无序,给数据处理和排序带来一定困扰。

5.应对方案为了解决时钟回拨问题,我们可以采取以下方案:5.1防止系统时间回拨-定期校准时间:定期校准系统时间,保证时间与其他机器的误差在可接受范围内。

java 定时器用法

java 定时器用法

Java定时器用法详解一、简介Java定时器(Timer)是Java编程语言中用于实现定时任务的一种工具。

它允许开发者在指定的时间间隔内执行特定的代码块,从而实现定时操作。

本文将详细介绍Java定时器的用法,包括创建定时器、设置任务、启动和停止定时器等内容。

二、创建定时器在Java中,要使用定时器,首先需要导入`java.util.Timer`类。

创建定时器的方法如下:import java.util.Timer;public class MyTimer {public static void main(String[] args) {Timer timer = new Timer();}}三、设置任务定时器的核心功能是执行定时任务,因此需要为定时器设置一个任务。

在Java 中,可以通过创建一个继承自`java.util.TimerTask`的类来实现定时任务。

以下是一个简单的示例:import java.util.TimerTask;class MyTask extends TimerTask {@Overridepublic void run() {System.out.println("定时任务执行");}}四、启动定时器创建好定时器和任务后,接下来需要启动定时器。

可以使用`schedule()`方法来设置定时器的任务和执行间隔。

以下是一个完整的示例:import java.util.Timer;import java.util.TimerTask;class MyTask extends TimerTask {@Overridepublic void run() {System.out.println("定时任务执行");}}public class MyTimer {public static void main(String[] args) {Timer timer = new Timer();MyTask task = new MyTask();timer.schedule(task, 0, 1000); // 立即执行,然后每隔1秒执行一次}}五、停止定时器在某些情况下,可能需要停止定时器的执行。

数字时钟代码

数字时钟代码

数字时钟代码1. 介绍数字时钟是一种常见的显示时间的装置,它通过数字显示屏显示当前的小时和分钟。

本文档将介绍如何编写一个简单的数字时钟代码。

2. 代码实现以下是一个基本的数字时钟代码实现示例:import timewhile True:current_time = time.localtime()hour = str(current_time.tm_hour).zfill(2)minute = str(current_time.tm_min).zfill(2)second = str(current_time.tm_sec).zfill(2)clock_display = f"{hour}:{minute}:{second}"print(clock_display, end="\r")time.sleep(1)代码说明:- `time.localtime()` 函数返回当前时间的结构化对象,包括小时、分钟和秒等信息。

- `str(current_time.tm_hour).zfill(2)` 将小时转换为字符串,并使用 `zfill()` 方法填充到两位数。

- `str(current_time.tm_min).zfill(2)` 和`str(current_time.tm_sec).zfill(2)` 同理处理分钟和秒。

- 使用 f-string 格式化字符串 `clock_display`,将小时、分钟和秒显示为 `` 的形式。

- `print(clock_display, end="\r")` 使用 `\r` 实现覆盖打印,使得时钟在同一行连续显示。

- `time.sleep(1)` 让程序每隔一秒更新一次时间。

请注意,上述代码需要在支持 Python 的环境中运行。

3. 结束语通过以上的代码实现,我们可以编写一个简单的数字时钟。

JAVA定时器的三种方法(详细注解)

JAVA定时器的三种方法(详细注解)

JAVA定时器的三种方法(详细注解)在Java中,有三种主要的定时器方法可以实现任务的定时执行。

这些方法包括Timer类、ScheduledThreadPoolExecutor类和TimerTask类。

下面将详细介绍这三种定时器方法的使用。

1. Timer类:Timer类是Java提供的一个基本的定时器类,可以用于在指定的时间间隔内执行指定的任务。

Timer类提供了schedule(和scheduleAtFixedRate(两个方法,用于按照指定的时间间隔执行任务。

(1)schedule(方法:该方法用于在指定的时间间隔后执行任务。

它的语法如下:public void schedule(TimerTask task, long delay)参数task表示要执行的任务,它是一个实现了TimerTask接口的类的实例。

参数delay表示延迟的时间,以毫秒为单位。

例如,下面的代码使用Timer类的schedule(方法,在延迟2秒后执行一个任务:```public void ruSystem.out.println("任务执行了");}},2000);```当运行上述代码后,程序将会输出"任务执行了"。

(2)scheduleAtFixedRate(方法:该方法用于以固定的时间间隔执行任务。

它的语法如下:public void scheduleAtFixedRate(TimerTask task, long delay, long period)参数task表示要执行的任务,它是一个实现了TimerTask接口的类的实例。

参数delay表示延迟的时间,以毫秒为单位。

参数period表示每次任务执行间隔的时间,也是以毫秒为单位。

例如,下面的代码使用Timer类的scheduleAtFixedRate(方法,延迟2秒后开始执行一个任务,并且每隔1秒执行一次:```public void ruSystem.out.println("任务执行了");}},2000,1000);```当运行上述代码后,程序将会输出"任务执行了",并且每隔1秒输出一次。

java 中国标准时间

java 中国标准时间

java 中国标准时间Java 中国标准时间。

Java是一种广泛使用的编程语言,它具有跨平台、面向对象、高性能等特点,在各种应用领域都有着重要的地位。

而中国标准时间(CST)作为中国的标准时间,对于Java开发者来说也是一个重要的概念。

本文将介绍Java中中国标准时间的相关知识,包括时区、时间格式化、时间计算等内容。

在Java中,时区是一个重要的概念。

时区代表了地球上的一个区域内使用的标准时间。

中国标准时间属于东八区,也就是UTC+8时区。

在Java中,可以使用TimeZone类来表示时区,通过TimeZone.getTimeZone("GMT+8")来获取表示中国标准时间的TimeZone对象。

对于需要处理不同时区时间的应用程序来说,正确地处理时区是非常重要的。

另外,Java中关于中国标准时间的处理还涉及到时间的格式化和解析。

在Java 8之前,我们通常使用SimpleDateFormat类来进行时间的格式化和解析。

例如,要将一个Date对象格式化为中国标准时间的字符串,可以使用SimpleDateFormat类的实例进行格式化操作。

而要将一个表示中国标准时间的字符串解析为Date对象,同样也可以使用SimpleDateFormat类来实现。

随着Java 8的引入,新的日期时间API提供了更加强大和易用的日期时间处理功能。

在新的API中,DateTimeFormatter类取代了SimpleDateFormat类,提供了丰富的日期时间格式化和解析功能。

通过DateTimeFormatter类,我们可以更加方便地进行中国标准时间的格式化和解析操作。

除了时区和时间格式化解析外,Java中还提供了丰富的时间计算功能。

对于中国标准时间的计算,我们可以使用Instant类、LocalDateTime类、ZonedDateTime类等来进行时间的加减运算、时区转换等操作。

这些类提供了丰富的方法来处理中国标准时间,开发者可以根据具体的需求选择合适的类来进行时间计算。

Java数字时钟(简单的桌面应用)

Java数字时钟(简单的桌面应用)

import java.util.*;/*****该程序是一个简单的数字时钟,每变化一秒,颜色随机变色,可以系统托盘,最大的特点是可以和桌面形成一体,也就是容纳这个数字时钟的窗体可以看成是透明的***********/import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.awt.image.BufferedImage;public class app509 extends JFrame{static int i=-1,geli=-1;/*这一部分是系统托盘图标的文件路径,可以自己设置,只要路径正确即可,可以是gif,jpg,png格式*/static Image image=Toolkit.getDefaultToolkit().getImage("D:1\\3.png");static SystemTray systemTray=SystemTray.getSystemTray();static PopupMenu pop01=new PopupMenu();static MenuItem MI01=new MenuItem("打开主程序");static MenuItem MI02=new MenuItem("退出程序");static MenuItem MI03=new MenuItem("隐藏");static TrayIcon trayIcon=new TrayIcon(image,"这是程序图标",pop01);static JLabel beijingtu=new JLabel();static JLabel xingqi=new JLabel(" ",JLabel.CENTER);static JLabel jlabel02=new JLabel("年",JLabel.CENTER);static JLabel jlabel03=new JLabel("月",JLabel.CENTER);static JLabel jlabel04=new JLabel("日",JLabel.CENTER);static JLabel jlabel05=new JLabel("分",JLabel.CENTER);static JLabel jlabel10=new JLabel("时",JLabel.CENTER);static JLabel jlabel12=new JLabel("分",JLabel.CENTER);static JLabel jlabel13=new JLabel("秒",JLabel.CENTER);static JLabel jlabel06=new JLabel(" ",JLabel.CENTER);static JLabel jlabel07=new JLabel(" ",JLabel.CENTER);static JLabel jlabel08=new JLabel(" ",JLabel.CENTER);static JLabel jlabel09=new JLabel(" ",JLabel.CENTER);static JLabel jlabel11=new JLabel(" ",JLabel.CENTER);static JLabel jlabel=new JLabel(" ",JLabel.CENTER);static JLabel jbData[]={jlabel13,jlabel02,jlabel03,jlabel04,jlabel10,jlabel12};static JLabel jbData02[]={jlabel,jlabel07,jlabel08,jlabel09,jlabel11,jlabel06};static int mill=0;static int minute=0;static int hour=0;static int day=0;static int month=0;static int year=0;static int week;static int zuobiaoX,zuobiaoY;static JFrame JF01=new JFrame();static JDialog JF=new JDialog(JF01," ");static Robot robot;static BufferedImage image1;static Rectangle rec;static class mouseListener extends MouseAdapter{public void mouseClicked(MouseEvent a){if(a.getSource()==trayIcon){if(a.getClickCount()==2){i++;if(i%2==1){geli++;if(geli%2==1){image1=robot.createScreenCapture(rec);beijingtu.setIcon(new ImageIcon(image1));JF.setBounds(0,0,120,560);JF.setVisible(true);}}else{JF.setBounds(0,0,400,1);}}}}public void mouseEntered(MouseEvent a){if(a.getSource()==JF){image1=robot.createScreenCapture(rec);beijingtu.setIcon(new ImageIcon(image1));JF.setBounds(0,0,120,560);JF.setVisible(true);}}public void mouseExited(MouseEvent a){if(a.getSource()==JF){JF.setBounds(0,0,400,1);}}}public static void main(String args[]) throws Exception{trayIcon.addMouseListener(new mouseListener());rec=new Rectangle(0,0,(int)Toolkit.getDefaultToolkit().getScreenSize().getWidth(),(int)Toolkit.getDefaultToolkit().getScreenSize().getHeight());try{robot=new Robot(); }catch(Exception b){}image1=robot.createScreenCapture(rec);beijingtu.setIcon(new ImageIcon(image1));MI01.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent a){Image1=robot.createScreenCapture(rec);beijingtu.setIcon(new ImageIcon(image1));JF.setBounds(0,0,120,560);JF.setVisible(true);}});MI03.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent a){JF.setBounds(0,0,400,1);}});MI02.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent a){System.exit(0);}});try{pop01.add(MI01);pop01.add(MI03);pop01.add(MI02);systemTray.add(trayIcon);trayIcon.setImageAutoSize(true);trayIcon.addMouseListener(new mouseListener());}catch(Exception a){} JF.setResizable(false) ;JF.addMouseListener(new mouseListener());JF.setUndecorated(true);beijingtu.setBounds(0,0,(int)Toolkit.getDefaultToolkit().getScreenSize().getWidth(),(int)Toolkit.getDefaultToolkit().getScreenSize().getHeight());JF.setLayout(null);JF.setBounds(0,0,120,560);JF.setVisible(true);jlabel02.setBounds(91,94,24,25);jlabel06.setBounds(15,94,64,28);jlabel03.setBounds(91,175,24,25);jlabel07.setBounds(2,125,86,75);jlabel04.setBounds(91,261,24,25);jlabel08.setBounds(2,210,86,75);jlabel10.setBounds(91,346,24,25);jlabel09.setBounds(2,296,86,75);jlabel11.setBounds(2,382,86,75);jlabel12.setBounds(91,433,24,25);jlabel13.setBounds(91,520,24,25);jlabel.setBounds(2,468,86,75);xingqi.setBounds(2,30,118,62);JF.add(xingqi);xingqi.setHorizontalTextPosition(JLabel.CENTER);xingqi.setFont(new Font("微软雅黑",Font.BOLD,20));for(int i=0;i<jbData.length;i++){JF.add(jbData[i]);JF.add(jbData02[i]);}for(int i=0;i<jbData.length;i++){jbData[i].setFont(new Font("微软雅黑",Font.BOLD,15));jbData02[i].setFont(new Font("微软雅黑",Font.BOLD,30));}jlabel06.setFont(new Font("微软雅黑",Font.BOLD,15));for(int i=0;i<jbData.length;i++){jbData[i].setForeground(Color.blue);jbData02[i].setForeground(Color.red);}for(int i=0;i<jbData.length;i++){jbData[i].setHorizontalTextPosition(JLabel.CENTER);jbData02[i].setHorizontalTextPosition(JLabel.CENTER);}jlabel02.setHorizontalTextPosition(JLabel.RIGHT);JF.add(beijingtu);xiancheng xiancheng01=new xiancheng();xiancheng01.start();}}class xiancheng extends Thread{static GregorianCalendar date=new GregorianCalendar();app509 app=new app509();public void run(){for(int i=0;i<60;){try{sleep(1000);}catch(Exception a){}app.year=(date=new GregorianCalendar()).get(date.YEAR);app.jlabel06.setText(Integer.toString(app.year));app.month=((date=new GregorianCalendar()).get(date.MONTH)+1);app.jlabel07.setText(Integer.toString(app.month));app.day=(date=new GregorianCalendar()).get(date.DAY_OF_MONTH);app.jlabel08.setText(Integer.toString(app.day));app.week=(date=new GregorianCalendar()).get(date.DAY_OF_WEEK);app.hour=(date=new GregorianCalendar()).get(date.HOUR_OF_DAY);app.jlabel09.setText(Integer.toString(app.hour));app.minute=(date=new GregorianCalendar()).get(date.MINUTE);app.jlabel11.setText(Integer.toString(app.minute));l=(date=new GregorianCalendar()).get(date.SECOND);app.jlabel.setText(Integer.toString(l));if(app.jlabel.getText()!=" "){app.xingqi.setForeground(new Color((int)(255*Math.random()),(int)(255*Math.random()),(int)(255*Math.random())));for(int j=0;j<app.jbData.length;j++){app.jbData[j].setForeground(new Color((int)(255*Math.random()),(int)(255*Math.random()),(int)(255*Math.random())));app.jbData02[j].setForeground(new Color((int)(255*Math.random()),(int)(255*Math.random()),(int)(255*Math.random())));}} switch(app.week){case 1 : app.xingqi.setText("星期日");break;case 2 : app.xingqi.setText("星期一");break;case 3 : app.xingqi.setText("星期二");break;case 4 : app.xingqi.setText("星期三");break;case 5 : app.xingqi.setText("星期四");break;case 6 : app.xingqi.setText("星期五");break;case 7 : app.xingqi.setText("星期六");break;}System.gc();}}}/****复制以上代码进行编译即可*****/程序效果图:。

java8 计算程序运行时间用法

java8 计算程序运行时间用法

java8 计算程序运行时间用法Java 8 计算程序运行时间用法:在 Java 8 中,我们可以使用`System.nanoTime()`方法来计算程序的运行时间。

该方法返回的是纳秒级别的精确时间。

要计算程序的运行时间,我们需要在程序的开始和结束处获取系统时间,并计算它们之间的差值。

以下是一个示例:```javapublic class Program {public static void main(String[] args) {// 获取程序开始时间long startTime = System.nanoTime();// 程序主体代码// ...// 获取程序结束时间long endTime = System.nanoTime();// 计算程序运行时间(以毫秒为单位)long duration = (endTime - startTime) / 1000000;System.out.println("程序运行时间:" + duration + " 毫秒");}}```在上述示例中,我们首先调用`System.nanoTime()`方法获取程序开始时间,并将其存储在`startTime`变量中。

然后执行程序的主体代码。

最后,我们再次调用`System.nanoTime()`方法获取程序结束时间,并将其存储在`endTime`变量中。

接下来,我们计算程序运行时间的差值,即`endTime - startTime`,并将其除以1000000,以获得以毫秒为单位的运行时间。

最后,我们打印出运行时间。

通过使用`System.nanoTime()`方法,我们能够更精确地计算程序的运行时间,以便更好地评估程序效率和性能。

使用以上方法可以帮助您计算 Java 8 程序的运行时间。

如有任何疑问,请随时提出。

Java 实现数字时钟

Java  实现数字时钟

Java 实现数字时钟时钟在人们的日常生活中很常见。

本实例介绍用Java事件实现简单的数字时钟功能。

(1)在【文件】菜单下选择【新建】|【类】命令,在弹出的对话框【新建Java类】中,创建ClockDemo.java文件,如图10-20所示。

图10-20 新建Java类(2)添加程序中要用到的程序包,代码如下所示。

import java.awt.*;import java.util.*;import javax.swing.*;(3)创建ClockDemo类的构造方法,设置窗口的大小、标题和显示时钟的字体,代码如下所示。

public ClockDemo(){super("数字时钟"); //调用父类构造函数setFont(new Font("Times New Roman",Font.BOLD,60)); //设置时钟的显示字体start(); //开始进程setSize(280,100); //设置窗口尺寸setVisible(true); //窗口可视setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口时退出程序 }(4)添加时钟的开始、运行和停止的方法,代码如下所示。

(5)添加时钟paint()方法和对窗口进行初始化,全部代码如下所示。

elsetimeInfo+=second;g.setColor(Color.white); //设置当前颜色为白色Dimension dim=getSize(); //得到窗口尺寸g.fillRect(0,0,dim.width,dim.height); //填充背景色为白色g.setColor(Color.orange); //设置当前颜色为橙色g.drawString(timeInfo,20,80); //显示时间字符串}public static void main(String[] args){new ClockDemo();}}(6)执行上述代码,结果如图10-21所示。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课 程 设 计2014 年 6 月 15 日教 学 院 计算机学院 课程名称 JA V A 课程设计题 目 时钟程序专 业 13应用技术 班 级 应用技术(1)班姓 名 张琳同组人员 刘敏 陈碧菲 周丹丹 田琼玲指导教师伍红华目录一.问题分析和任务定义 ..................................... 错误!未定义书签。

二.逻辑设计.......................................................... 错误!未定义书签。

三.详细设计.......................................................... 错误!未定义书签。

四.程序编码.......................................................... 错误!未定义书签。

五.程序调试与测试 ............................................. 错误!未定义书签。

六.结果分析.......................................................... 错误!未定义书签。

七. 附录 (8)八. 参考文献 (9)一.问题分析和任务定义1.问题分析此次课程设计的题目为简单的小时钟程序设计,通过做巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK等开发工具的运用,拓宽常用类库的应用。

运用了鼠标的监听和事件的监听以及侦听的技术来时钟的功能。

时钟可以分为:电子时钟,数字时钟。

其中数字时钟包括表盘,数字,指针。

用JPanel类来指定布局管理器,同时新增一个功能也是设计需求的功能,可以随时的调时间,运用到鼠标和按钮的监听效果来完成调时间的功能。

2.任务定义基本功能:打开java工作界面,有很明显的数字时钟在界面上,并且指针在走动,数字钟的显示以本地系统时间而定,一秒钟跳动一次,若本地系统时间发生改变,则数字钟的时、分、秒也随着改变,左上角并拥有与电脑同步的时间日期与星期用数字直接显示出来。

基本实现:定义窗口类继承import javax.swing.JFrame;类并实现ActionListener接口,在窗口类中定义成员变量,用于表示窗口中菜单、文本框,定义成员方法actionPerformed,用于事件处理。

3.任务分工(1)图形界面设置关闭窗口(田琼玲)(2)显示时钟桌面(陈碧菲)(3)实现接口 runnable的方法run,用来刷新时分秒三指针的度数(刘敏)(4)方法重写绘制钟面各元素(张琳)(5)将电脑时间日期进行同步,并显示出来,用switch语句实现多分支选择结构(周丹丹)二.逻辑设计1.包java.awt包,包含构成抽象窗口的工具集(abstrsct window toolkit)的多个类,用来构建和管理应用程序的图形用户界面(GUI)。

java.Swing包,扩充和增强图形用户界面功能。

java.awt.event包,提供接口和类来处理不同类型的事件触发的AET组件。

java.text包,提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。

java.util包,包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。

java.awt.event包,提供处理由 AWT 组件所激发的各类事件的接口和类。

javax.swing.event包,供 Swing 组件触发的事件使用。

2.类的设计(1)Color类:Color类用来定义颜色,包括图形背景的颜色,表盘的颜色,指针的颜色,数字的颜色。

(2)Data DateFormat,SimpleDateFormat :该类是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。

单位是毫秒。

其中SimpleDateFormat类是对日期/时间格式化子类允许进行格式化(3)Calender类:Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得日期)提供了一些方法,瞬间可用毫秒值来表示。

(4)Date类:Date类用来表示特定的瞬间,时间精确到毫秒。

(5)JFrame类:该类用来控制窗格和根窗格(6)JPanel类:JPanel 是一般轻量级容器。

可以用来指定布局管路器。

(7)JButton类:该类定义按钮,并且实现按钮(8)ActionEvent接口:指示发生了组件定义的动作的语义事件。

当特定的组件动作(比如被按下)发生时,由组件(比如 Button)生成此高级事件。

事件被传递给每一个ActionListener 对象,所以要实现ActionListener的接口。

(9)Timer类:在指定时间间隔触发一个或多个 ActionEvent。

它将 Timer 用作绘制其帧的触发器。

(10)JSpinner:该类用来让用户从一个有序序列中选择一个数字或者一个对象值的单行输入字段。

Spinner 通常提供一对带小箭头的按钮以便逐步遍历序列元素允许用户在spinner 中直接输入合法值。

3.主要内容创建一个钟表。

借助swing类和接口内部类的实现,在本程序中以实现Runnable接口内部类的形式创建多线程对象。

Runnable接口只定义了一个run()方法,所以调用start和sleep()方法时,必须创建Thread实例化对象。

Interrupt()方法的作用是中断线程。

其作用方式是:多线程对象.interrupt()。

4.整体流程类的总体名字为clock,实现ActionListener接口,鼠标的监听器实现此程序。

先运用构造函数画一个长和宽都为300的圆,并且设置颜色为黑色,固定其窗口调整为拉动不可变定义setVisible(true),就是调整窗口可保持不变。

画圆画完圆之后在圆上设置12个数字,运用math函数方法来绘制时间,并且把每个时间的位置用函数关系调整好。

在圆上设置时针,要用到math类,来绘制时针并且用函数来控制时针的走动和相对应的位置。

color类来控制颜色,这里定为青色。

定义时针的变量类型为string类型的成员变量,设置名称为Hour。

在圆上设置分针,要用到math类,来绘制时针并且用函数来控制时针的走动和相对应的位置。

color类来控制颜色,这里定为蓝色。

定义时针的变量类型为string类型的成员变量,设置名称为Minute。

在圆上设置秒针,要用到math类,来绘制时针并且用函数来控制时针的走动和相对应的位置。

color类来控制颜色,这里定为红色。

定义时针的变量类型为string类型的成员变量,设置名称为Second。

在这些设置完后,需要对其进行监控就要用到ActionPerformed方法,对事件的监控和ActionEvent接口并且递给每一个 ActionListener 对象,所以还要创建一个类实现ActionListener接口。

最后编写主函数:其中有三个成员变量,以图的形式来展示2.程序主流程图三.详细设计程序主功能图本次实训上机操作中,我负责的为方法的“重写绘制钟面各元素,方法的重写极为子类可继承父类中的方法,而不需要重新编写相同的方法。

Public void paint(Graphics g)paint()就是一个画笔方法,用来在屏幕上绘制你所需要绘制的东西。

要是想屏幕上绘制东西就得先用Grapahics把东西绘制到内存里去再由repaint();方法显示到屏幕上去。

设置左上角的坐标为(0,0),并以半径为8用黑色进行背景填充颜色,后又画圆的轮廓即为表盘的轮廓,再用三种颜色分别构造不同长短大小的指针,最后利用两个for循环分别在表盘内运用g.drawString根据调用的函数算法在表盘内相应的坐标位置进行画点与数字的显示。

四.程序编码个人任务“方法重写绘制钟面各元素”代码public void paint(Graphics g) {// 清屏super.paint(g);g.setColor(Color.BLACK);//用黑色g.fillRect(0, 0, r * 3, r * 3);//填充一个黑色的矩形做为背景// 画圆g.setColor(Color.WHITE);//用白色g.drawOval(x, y, r * 2, r * 2);//画出表盘的轮廓// 用红色画秒针g.setColor(Color.RED);int x1 = (int) ((r - 10) * Math.sin(rad * s));int y1 = (int) ((r - 10) * Math.cos(rad * s));g.drawLine(x + r, y + r, x + r + x1, y + r - y1);// 用蓝色画分针g.setColor(Color.BLUE);x1 = (int) ((r - r / 2.5) * Math.sin(rad * m));y1 = (int) ((r - r / 2.5) * Math.cos(rad * m));g.drawLine(x + r, y + r, x + r + x1, y + r - y1);// 用青色画时针g.setColor(Color.CYAN);x1 = (int) ((r - r / 1.5) * Math.sin(rad * h));y1 = (int) ((r - r / 1.5) * Math.cos(rad * h));g.drawLine(x + r, y + r, x + r + x1, y + r - y1);// 用黄色画表盘上的数字g.setColor(Color.YELLOW);int d = 29;for (int i = 1; i <= 12; i++) {x1 = (int) ((r - 10) * Math.sin(rad * d));y1 = (int) ((r - 10) * Math.cos(rad * d));g.drawString(i + "", x + r + x1 - 4, x + r - y1 + 5);d += 30;}// 画小点,表示刻度d = 0;for (int i = 0; i < 60; i++) {x1 = (int) ((r - 2) * Math.sin(rad * d));y1 = (int) ((r - 2) * Math.cos(rad * d));g.drawString(".", x + r + x1 - 1, x + r - y1 + 1);d += 6; }五.程序调试与测试1.显示指针时钟效果2.显示数字时钟效果部分代码:// 获得时间、星期、日期Calendar now1 = new GregorianCalendar();//获得当前的日期时间对象int hour = now1.get(Calendar.HOUR_OF_DAY);//小时,获得当前的时刻int minute = now1.get(Calendar.MINUTE);//分,同上int second = now1.get(Calendar.SECOND);//秒int year = now1.get(Calendar.YEAR);//年int month = now1.get(Calendar.MONTH)+1;//月int date = now1.get(Calendar.DAY_OF_MONTH);//日int week = now1.get(Calendar.DAY_OF_WEEK);//星期 System.out.println(week);//星期转换字符串String weekDay = "";switch(--week){case 1:weekDay="一";break;case 2:weekDay="二";break;case 3:weekDay="三";break;case 4:weekDay="四";break;case 5:weekDay="五";break;case 6:weekDay="六";break;case 0:weekDay="日";break;default :weekDay="";break;}//显示时间、星期、日期g2d.setColor(Color.PINK);g2d.drawString((hour<10?"0":"")+hour+ ":"+ (minute<10?"0":"")+minute+ ":"+ (second<10?"0":"")+second+" "+"("+weekDay+")"+" "+year+ "/"+ (month<10?"0":"")+month+ "/"+ (date<10?"0":"")+date,5, 15);}六.结果分析1.运行Clock.java图2查看实时时间运行结果分析:本程序运行结果界面显示为黑色,并加入了12个刻度,指针颜色设置上也都是不一样的,左上角的时间日期显示与电脑上的进行了同步,并且运用了switch的星期转换字符串,当电脑上的时间发生改变的时候,钟上的指针也会跟着发生改变。

相关文档
最新文档