java swing 实时_Java Swing.Timer获得实时毫秒

本文介绍了如何使用Java Swing的Timer类替代while (true)循环来实现实时计时功能。通过创建一个定时器并设置合适的延迟,可以在Swing GUI中安全地更新时间显示。示例代码展示了一个简单的倒计时定时器,更新JTextField中的时间显示。
摘要由CSDN通过智能技术生成

小编典典

您将希望摆脱它while (true),而使用Swing计时器代替它,因为那是Timer的用途-在Swing GUI中重复进行调用, 而 不必求助于破坏线程的while (true)构造。

您将需要给您的计时器一个合理的延迟时间。0?常识告诉您不要使用此功能。12、15-更好。

为了使Swing计时器正常工作,您需要有一个活动的Swing事件线程,这可以通过显示Swing GUI,任何GUI(例如JOptionPane)来获得。

例如:

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JTextField;

import javax.swing.Timer;

class Lsen implements ActionListener {

public static final int MSECS_PER_SEC = 1000;

public static final int SECS_PER_MIN = 60;

public static final int MIN_PER_HR = 60;

private static final String TIME_FORMAT = "%02d:%02d:%02d:%03d";

private long startTime;

private JTextField timeField;

public Lsen(JTextField timeField) {

this.timeField = timeField;

}

public void actionPerformed(ActionEvent e) {

if (startTime == 0L) {

startTime = System.currentTimeMillis();

} else {

long currentTime = System.currentTimeMillis();

int diffTime = (int) (currentTime - startTime);

int mSecs = diffTime % MSECS_PER_SEC;

diffTime /= MSECS_PER_SEC;

int sec = diffTime % SECS_PER_MIN;

diffTime /= SECS_PER_MIN;

int min = diffTime % MIN_PER_HR;

diffTime /= MIN_PER_HR;

int hours = diffTime;

String time = String.format(TIME_FORMAT, hours, min, sec, mSecs);

// System.out.println("Time: " + time);

timeField.setText(time);

}

}

}

public class StopWatchMain {

private static final int TIMER_DELAY = 15;

public static void main(String[] args) {

final JTextField timeField = new JTextField(10);

timeField.setEditable(false);

timeField.setFocusable(false);

JPanel panel = new JPanel();

panel.add(new JLabel("Elapsed Time:"));

panel.add(timeField);

Lsen l = new Lsen(timeField);

Timer t = new Timer(TIMER_DELAY, l);

t.start();

JOptionPane.showMessageDialog(null, panel);

t.stop();

}

}

编辑

您询问长数据类型的含义。请在此处查看:原始数据类型。您会看到long表示长整数,因此您可以认为它与int相似,但是能够容忍更大的正值和负值而不会溢出。

2020-11-30

Java中可以使用`javax.swing.Timer`类来实现记时功能。`Timer`类是Swing组件库中的一个定时器类,用于在指定的时间间隔内执行某个任务。 使用`Timer`类实现记时功能的步骤如下: 1. 创建一个`javax.swing.Timer`对象,并设置时间间隔和动作监听器。时间间隔指定定时器的触发时间,动作监听器则指定每次定时器触发时执行的代码。 2. 调用`start()`方法启动定时器。 3. 在动作监听器中编写相应的代码来实现记时功能。 下面是一个简单的记时器示例: ```java import javax.swing.*; import java.awt.*; import java.awt.event.*; public class TimerExample extends JFrame implements ActionListener { private JLabel timeLabel; private Timer timer; private int seconds; public TimerExample() { super("Timer Example"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 100); setLayout(new FlowLayout()); // 创建一个标签来显示计时器的时间 timeLabel = new JLabel("Time: 0 seconds"); add(timeLabel); // 创建一个定时器对象,每隔1秒触发一次 timer = new Timer(1000, this); seconds = 0; // 启动定时器 timer.start(); } // 定时器动作监听器 public void actionPerformed(ActionEvent e) { seconds++; timeLabel.setText("Time: " + seconds + " seconds"); } public static void main(String[] args) { new TimerExample().setVisible(true); } } ``` 在这个例子中,我们创建了一个`JLabel`标签来显示计时器的时间,然后创建了一个定时器对象`timer`,并设置了时间间隔为1秒,并将动作监听器设置为当前对象。在动作监听器中,每次定时器触发时,将计时器的时间加1秒,并更新标签的显示内容。 注意:定时器的时间间隔单位是毫秒。在上面的例子中,我们设置时间间隔为1000毫秒,即1秒。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值