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

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

小编典典

您将希望摆脱它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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值