javax.swing.Timer

 

javax.swing
类 Timer

java.lang.Object
  

javax.swing.Timer
所有已实现的接口:
Serializable

public class Timerextends Objectimplements Serializable
 
 

在指定时间间隔触发一个或多

 

在指定时间间隔触发一个或多个 ActionEvent。一个示例用法是动画对象,它将 Timer 用作绘制其帧的触发器。

设置计时器的过程包括创建一个 Timer 对象,在该对象上注册一个或多个动作侦听器,以及使用 start 方法启动该计时器。例如,以下代码创建并启动一个每秒(该时间由 Timer 构造方法的第一个参数指定)触发一次动作事件的计时器。Timer 构造方法的第二个参数指定接收计时器动作事件的侦听器。

int delay = 1000; //milliseconds
  ActionListener taskPerformer = new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
          //...Perform a task...
      }
  };
  new Timer(delay, taskPerformer).start();

构造 Timer 时要指定一个延迟参数和一个 ActionListener。延迟参数用于设置初始延迟和事件触发之间的延迟(以毫秒为单位)。启动了计时器后,它将在向已注册侦听器触发第一个 ActionEvent 之前等待初始延迟。第一个事件之后,每次超过事件间延迟时它都继续触发事件,直到被停止。

构造之后,可以单独更改初始延迟和事件间延迟,并且可以添加其他 ActionListener

如果希望计时器只在第一次时触发然后停止,可以对计时器调用 setRepeats(false)

尽管所有 Timer 都使用一个共享线程(由第一个执行操作的 Timer 对象创建)执行等待,但是 Timer 的动作事件处理程序还会在其他线程(事件指派线程上)执行。这意味着 Timer 的操作处理程序可以安全地在 Swing 组件上执行操作。但是,它也意味着处理程序必须快速执行以保证 GUI 作出响应。

在 1.3 版本中,向 Java 平台添加了另一个 Timer 类:java.util.Timer。该类和 javax.swing.Timer 的基本功能相同,但是 java.util.Timer 更常用,功能更多。javax.swing.Timer 有两个特征,它们可以让使用 GUI 更方便。首先,其事件处理程序都是 GUI 程序员所熟悉的,并且可以更简单地处理事件指派线程。第二,其自动线程共享意味着不必采取特殊步骤来避免生成过多线程。相反,计时器使用同一个线程让光标闪烁、使工具提示显示等等。

通过查看 The Java Tutorial 中的 How to Use Timers 一节,可以找到使用计时器的更详细的文档和几个示例。有关在此 Timer 类和 java.util.Timer 之间进行选择的更多示例和帮助信息,请参阅 The Swing Connection 中的 Using Timers in Swing Applications 一文。

警告:此类的序列化对象与以后的 Swing 版本不兼容。当前序列化支持适用于短期存储,或适用于在运行相同 Swing 版本的应用程序之间进行 RMI(Remote Method Invocation,远程方法调用)。从 1.4 版本开始,已在 java.beans 包中添加了支持所有 JavaBeansTM 长期存储的功能。请参阅 XMLEncoder

 

 

另请参见:
java.util.Timer
1 import javax.swing.Timer;

 

转载于:https://www.cnblogs.com/LiuYanYGZ/p/9466181.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您的问题是如何创建一个 GUI 窗口,包括一个显示汉字的标签和一个文本框用于玩家输入,并使用线程实现定时器,每隔一定时间生成一个随机汉字,并在标签上展示,对吗? 下面是一个示例代码,它可以实现您的需求。您可以参考这个示例代码进行编写: ```java import java.awt.*; import java.awt.event.*; import java.util.Timer; import java.util.TimerTask; import javax.swing.*; public class HanziGame implements ActionListener { private JFrame frame; private JPanel panel; private JLabel label; private JTextField textField; private Timer timer; private int score; public HanziGame() { frame = new JFrame("汉字游戏"); panel = new JPanel(); label = new JLabel(); textField = new JTextField(10); score = 0; // 设置标签和文本框的字体 Font font = new Font("SimSun", Font.PLAIN, 40); label.setFont(font); textField.setFont(font); // 添加标签和文本框到面板 panel.add(label); panel.add(textField); // 添加面板到窗口 frame.add(panel); // 设置窗口大小和位置 frame.setSize(500, 200); frame.setLocationRelativeTo(null); // 创建定时器 timer = new Timer(); timer.schedule(new HanziTask(), 0, 2000); // 添加文本框的输入事件监听器 textField.addActionListener(this); // 显示窗口 frame.setVisible(true); } // ActionListener 接口实现 public void actionPerformed(ActionEvent e) { String input = textField.getText(); String hanzi = label.getText(); if (input.equals(hanzi)) { score++; textField.setText(""); } } // 定时器任务内部类 private class HanziTask extends TimerTask { private String[] hanziList = {"一", "二", "三", "四", "五", "六", "七", "八", "九", "十"}; public void run() { int index = (int) (Math.random() * hanziList.length); String hanzi = hanziList[index]; label.setText(hanzi); score--; if (score < 0) { // 停止定时器 timer.cancel(); timer.purge(); // 显示分数 JOptionPane.showMessageDialog(frame, "游戏结束,您的分数是:" + score); // 存储分数 // ... } } } public static void main(String[] args) { new HanziGame(); } } ``` 这个程序会创建一个 GUI 窗口,包括一个显示汉字的标签和一个文本框用于玩家输入。程序使用线程实现定时器,每隔 2 秒生成一个随机汉字,并在标签上展示,同时将分数减 1。玩家需要在文本框中输入正确的汉字,如果输入正确,则分数加 1。当分数小于 0 时,游戏结束,弹出一个提示框显示分数,并将分数存储到本地文件中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值