使用Timer类的两个实例 动态时钟

 1 package chapter16;
 2
 3 import javax.swing.*;
 4 import chapter15.StillClock;
 5 import java.awt.event.*;
 6
 7 public class ClockAnimation extends JFrame {
 8     public class TimerListener implements ActionListener {
 9         @Override
10         public void actionPerformed(ActionEvent e) {
11             // TODO Auto-generated method stub
12             clock.setCurrentTime();
13             clock.repaint();
14         }
15     }
16     private StillClock clock=new StillClock();
17     public ClockAnimation(){
18         add(clock);
19         Timer timer=new Timer(1000,new TimerListener());
20         timer.start();
21     }
22     public static void main(String[] args) {
23         // TODO Auto-generated method stub
24         ClockAnimation frame=new ClockAnimation();
25         frame.setTitle("ClockAnimation");
26         frame.setSize(200,200);
27         frame.setLocationRelativeTo(null);
28         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
29         frame.setVisible(true);
30
31     }
32
33 }

第一个实例是动态时钟,其中StillClock是静态时钟的类。

 1 package chapter16;
 2 import javax.swing.*;
 3 import java.awt.*;
 4 import java.awt.event.*;
 5
 6 public class AnimationDemo extends JFrame {
 7     public AnimationDemo(){
 8         add(new MovingMessagePanel("message moving?"));
 9     }
10     public static class MovingMessagePanel extends JPanel {
11
12         public class TimerListener implements ActionListener {
13             @Override
14             public void actionPerformed(ActionEvent e) {
15                 // TODO Auto-generated method stub
16                 repaint();
17             }
18         }
19         private String message="Welcome to Java";
20         private int xCoordinate=0;
21         private int yCoordinate=30;
22
23         public MovingMessagePanel(String message){
24             this.message=message;
25             Timer timer=new Timer(500,new TimerListener());
26             timer.start();
27         }
28         protected void paintComponent(Graphics g){
29             super.paintComponent(g);
30             if(xCoordinate>getWidth()){
31                 xCoordinate=-20;
32             }
33             xCoordinate+=5;
34             g.drawString(message, xCoordinate, yCoordinate);
35         }
36     }
37     public static void main(String[] args) {
38         // TODO Auto-generated method stub
39         AnimationDemo frame=new AnimationDemo();
40         frame.setTitle("AnimationDemo");
41         frame.setSize(300,100);
42         frame.setLocationRelativeTo(null);
43         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
44         frame.setVisible(true);
45
46     }
47
48 }

第二个实例是一个可以横向移动的字符串。

两个实例都是采用了Timer类。

不同的地方在于,一个TimerListener定义在JFrame也就是外层框架中,一个TimerListener定义在内层,JPanel中。目前还分不清楚这两种情况应该如何应用?

等后面只是丰富来再来解决。

时间: 2024-08-10 15:10:08

使用Timer类的两个实例 动态时钟的相关文章

Java定时任务:利用java Timer类实现定时执行任务的功能

一.概述 在java中实现定时执行任务的功能,主要用到两个类,Timer和TimerTask类.其中Timer是用来在一个后台线程按指定的计划来执行指定的任务. TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务,具体要执行的代码写在TimerTask需要被实现的run方法中. 二.先看一个最简单的例子 我们通过代码来说明 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

Python 实现接口类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)

实现接口类的两种方式 方式一 from abc import ABCMeta from abc import abstractmethod class BaseMessage(metaclass=ABCMeta): @abstractmethod def send(self,subject,body,to,name): pass 方式二 class BaseMessage(object): def send(self, subject, body, to, name): raise NotImp

Android实战简易教程-第五十八枪(AlarmManager类用法研究小实例)

一.概念及相关方法 android中实现定时任务一般有两种实现方式,一种是使用Java API中提供的Timer类,一种是使用android的Alarm机制.Timer机制有个短板就是不太适用于那些需要长期在后台运行的任务,我们都知道为了让电池更加耐用,会在长时间不操作手机的情况下,CPU进入休眠状态,这是可能导致Timer中的定时任务无法正确运行.所以我们重点来研究一下Alarm机制. AlarmManager,顾名思义,就是"提醒",是Android中常用的一种系统级别的提示服务,

Java多线程基础(二)定时器类:Timer类和TimerTask类

Java多线程基础(二)定时器类:Timer类和TimerTask类 Timer类和TimerTask类是jdk实现定时器功能的早期方法,jdk1.5以前就支持Timer类和TimerTask类.JDK1.5之后引入了新的机制,将在后续博文中研究. 1 指定时间间隔后执行任务 import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class TraditionalTimerTest {

Java Class类以及获取Class实例的三种方式

T - 由此 Class 对象建模的类的类型.例如,String.class 的类型是Class<String>.如果将被建模的类未知,则使用Class<?>. [java] view plain copy print? public final class Class<T> extends Object  implements java.io.Serializable, java.lang.reflect.GenericDeclaration, java.lang.r

iOS开发中 类、对象、实例变量、成员变量、属性变量等区别和关系

类(class):具有相同属性和行为等同一类元素等总称,类是一个抽象的概念. 区分是类还是对象,看它能否继续被细分. 在OC中,类是表示对象类型的结构体,对象通过类来获取自身的各种信息.类由两个部分组成:*.h和*.m文件组成. *.m文件中 implemention部分是类的实现部分,内部包含类中的各种信息,包括各种实例方法或类方法. 类别( category):是为现有的类添加新方法的方式,通常以"类名称+类别名称"来命名. 类别中不能添加新的实例变量.但是可以在类别中添加属性.

Timer类实现定时调度

使用timer类定时调度,生成文件 timer类需要通过监听器来初始化定时器,web容器在运行时自动加载 先写个定时任务类CreateFileTask,继承至TimerTask,需要重写run()方法 import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; i

报表开发实例——动态多层次KPI钻取报表(II)

在报表开发实例--动态多层次KPI钻取报表(I)中,我们说到了动态层次报表需要层次钻取的场景,并介绍了利用oracle复杂sql的实现方法.这里仍然通过该报表来了解一下使用"脚本+本地文件"的开发方法. 各级部门KPI报表的格式和具体要求参见(I).有所不同的是,报表数据源从数据库表变为本地文件:tree.b(树形结构维表)和kpi.b(指标事实表),数据如下图: Tree文件数据 Kpi文件数据 Tree的叶子节点,通过id字段与kpi表关联.KPI文件每个ID每天都会新增kpi记录

设置定时任务(Timer类的介绍)

设置定时任务(Timer类的介绍) 在我们的许多项目中,我们都需要用到定时任务,因此想借此博文来对定时任务进行一个介绍. 设置定时任务步骤如下: 先new一个Timer对象 Timer timer = new Timer() ; 然后调用它的schedule方法,例如:timer.schedule(new Task(), 5 * 1000,5*1000); 相信上面的代码我们不会陌生,即使我们没有写过,但我们一定见到过. 要注意的是:上面第二步所提到的schedule方法有四个重载的方法.下面进