请教高手一个Java的类型用法。

CJCO059 CJCO059 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
高手,您好:
小弟弄的这个类型的全部代码如下:
package c_port_packageBJTeacher;
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.*;
import java.util.Date;
import java.text.SimpleDateFormat;

public class StopWatch extends JFrame {
JButton btnStart, btnStop;

JLabel label;
Timer timer;//计时器
public StopWatch() {
label = new JLabel("00:00:00.000");
btnStart = new JButton("start");
btnStop = new JButton("stop");
final int delay = 100;//时间间隔(动作事件间延迟的毫秒数)
final Date startTime = new Date();//类 Date 表示特定的瞬间,精确到毫秒
final SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.S");//时间格式化
final Action taskPerformer = new AbstractAction() {//计时器动作事件的侦听器
public void actionPerformed(ActionEvent evt) {
/*
* System.currentTimeMillis() 返回以毫秒为单位的当前时间; 时区为当前所在的时区 北京时间东8区
* startTime.getTime() 返回自 1970/1/1 00:00:00 GMT 以来此 Date 对象表示的毫秒数; 时区为本初子午线所在的时区可以当做东0区
* 28800000 是8小时的毫秒数 因为前面两种方法取得的毫秒数不在同一时区 所以必须得统一 即减去相差的8个时区的8小时的毫秒数
*
* 这个是该程序的重点难点之处,请参照API中关于日期时间类的介绍
*/
Date d = new Date(System.currentTimeMillis()
- startTime.getTime() - 28800000);
label.setText(sdf.format(d));//将时间格式化后显示在标签上
label.repaint();//重新绘制标签
}
};
btnStart.addActionListener(new ActionListener() {//按钮“start” 事件处理
public void actionPerformed(ActionEvent evt) {
startTime.setTime(new Date().getTime());//重置时间
/*创建一个以taskPerformer为动作侦听器,动作事件延迟为delay毫秒的计时器
*即每隔0.1(delay = 100)秒触发一次事件
* 这个Timer类,具体用法自己查API
*/
timer = new Timer(delay, taskPerformer);
timer.start();//启动计时器
}
});
btnStop.addActionListener(new ActionListener() {//按钮“stop” 事件处理
public void actionPerformed(ActionEvent evt) {
if (timer != null && timer.isRunning())//如果计时器为创建或不在运行状态下
timer.stop();//停止计时器 ;若计时器不存在或没有运行则会抛出异常所以要先判断一下
}
}); Container c = getContentPane();
c.add(label, BorderLayout.NORTH);
c.add(btnStart, BorderLayout.CENTER);
c.add(btnStop, BorderLayout.SOUTH);
} public static void main(String[] args) {
//下面 自己查看API或者baidu或者google,主要在于自己多动手
javax.swing.SwingUtilities.invokeLater(new Runnable() {//AWT 事件指派线程上的异步执行
public void run() {
createAndShowGUI();//作用在于更新组件及刷新计时器
}
}); } private static void createAndShowGUI() {
StopWatch window = new StopWatch();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.pack();
window.setVisible(true);
}
}

希望高手能够点拨小弟:
如果小弟希望能够通过“代码调用”出来上面类型的计时功能,小弟应该怎么修改上面的类型?
现在看来,这个类型是需要start按钮的点击,之后开启Timer函数的跳动,让程序的计时功能产生。
现在小弟问的是:
上面的代码怎么修改,能够让小弟在一个上层类型中调用这里的类型。
并且,可以以小弟的上层代码调用为本代码类型的起跑时刻?
希望能够有高手帮帮我。
谢谢高手!!
...全文

相关推荐

评论 2
收藏 已收藏
分享
返回顶部
CJCO059
Java SE 62,620 成员 307,251 内容