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

CJCO059 2015-02-08 07:39:17
高手,您好:
小弟弄的这个类型的全部代码如下:
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函数的跳动,让程序的计时功能产生。
现在小弟问的是:
上面的代码怎么修改,能够让小弟在一个上层类型中调用这里的类型。
并且,可以以小弟的上层代码调用为本代码类型的起跑时刻?
希望能够有高手帮帮我。
谢谢高手!!
...全文
296 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
普凡 2015-02-09
  • 打赏
  • 举报
回复
还是没太明白楼主的意思哈。不太明确你所说的上层调用是什么意思?是从别的类访问操作你这个类的意思吗? 如果是这个意思,那么上层类持有你本地类的对象引用就可以了。
捏造的信仰 2015-02-09
  • 打赏
  • 举报
回复
简单,将两个按钮的 actionPerformed() 方法的内容提取出来,变成 StopWatch 类的方法即可。

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧