Java做的秒表: 代码已有 求高人给中文注释(结构分析)

importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassTestTimerexten... import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TestTimer extends JFrame implements ActionListener, Runnable {
private static TestTimer obj;
private JButton btnStart;
private JButton btnPause;
private JButton btnResume;
private JButton btnStop;
private JLabel lblTime;
private static Thread th;
private long count;

public TestTimer(){
super("秒表");
btnStart = new JButton("开始");
btnPause = new JButton("暂停");
btnResume = new JButton("继续");
btnStop = new JButton("停止");
lblTime = new JLabel("00:00:00.000");
this.setLayout(new FlowLayout());
this.add(btnStart);
this.add(btnPause);
this.add(btnResume);
this.add(btnStop);
this.add(lblTime);
btnStart.addActionListener(this);
btnPause.addActionListener(this);
btnResume.addActionListener(this);
btnStop.addActionListener(this);
this.setSize(150, 200);
this.setVisible(true);
}

public static void main(String[] args) {
obj = new TestTimer();
}

public void actionPerformed(ActionEvent e) {
JButton btn = (JButton)e.getSource();
if(btn.getText().equals("开始")){
th = new Thread(obj);
count = 0;
th.start();
}
else if(btn.getText().equals("暂停")){
th.suspend();
}
else if(btn.getText().equals("继续")){
th.resume();
}
else if(btn.getText().equals("停止")){
th.stop();
}
}

@Override
public void run() {
while(true){
int ms, seconds, minutes, hours;
String msg = "";
hours = (int)(count / 3600000);
minutes = (int)((count - hours * 3600000) / 60000);
seconds = (int)((count - hours * 3600000 - minutes * 60000) / 1000);
ms = (int)(count % 1000);
if(hours < 10){
msg += "0" + hours + ":";
}
else{
msg += hours + ":";
}
if(minutes < 10){
msg += "0" + minutes + ":";
}
else{
msg += minutes + ":";
}
if(seconds < 10){
msg += "0" + seconds + ":";
}
else{
msg += seconds + ":";
}
if(ms < 10){
msg += "00" + ms;
}
else if(ms < 100){
msg += "0" + ms;
}
else{
msg += ms;
}

lblTime.setText(msg);
count++;
try {
Thread.sleep(1);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
展开
 我来答
伊萌坦格利安
2011-10-26 · TA获得超过178个赞
知道小有建树答主
回答量:112
采纳率:0%
帮助的人:126万
展开全部
代码太长,怕吞了。。。

public class TestTimer extends JFrame implements ActionListener, Runnable {
private static TestTimer obj; // 自己的一个静态实例,在这里没什么特别的意思
private JButton btnStart; // 开始按钮
private JButton btnPause; // 暂停按钮
private JButton btnResume; // 恢复按钮
private JButton btnStop; // 停止按钮
private JLabel lblTime; // 显示时间的Label(中文是标签?)
private static Thread th; // 一个用来控制时间的线程
private long count; // 计数

public TestTimer(){
super("秒表"); // TestTimer继承JFrame,这里调用父类的构造方法,传入的参数表示窗口的标题
btnStart = new JButton("开始"); // 初始化按钮,传入的参数表示按钮上显示的文字
btnPause = new JButton("暂停"); // 同上
btnResume = new JButton("继续"); // 同上
btnStop = new JButton("停止"); // 同上
lblTime = new JLabel("00:00:00.000"); // 初始化Label,传入的参数表示Label上显示的文字
this.setLayout(new FlowLayout()); // 设置layout风格为FlowLayout(就是设置控件的摆放方式)
this.add(btnStart); // 将控件加入到窗口中
this.add(btnPause); // 同上
this.add(btnResume); // 同上
this.add(btnStop); // 同上
this.add(lblTime); // 同上
btnStart.addActionListener(this); // 为按钮添加监听器(为什么是this,因为TestTimer类实现了ActionListener接口,所以可以这样用)
btnPause.addActionListener(this); // 为按钮添加监听器(但我不建议这样,这样的话类的职责不明确)
btnResume.addActionListener(this); // 为按钮添加监听器(当然,如果只是实现需求,怕麻烦可以这么做)
btnStop.addActionListener(this); // 为按钮添加监听器
this.setSize(150, 200); // 设置窗口大小
this.setVisible(true); // 显示窗口
}

public static void main(String[] args) {
obj = new TestTimer(); // 主函数入口,初始化实例(其实就是启动窗口)
}

public void actionPerformed(ActionEvent e) {// 这里是实现ActionListener接口的地方
JButton btn = (JButton)e.getSource(); // 获得是哪个按钮触发了事件
if(btn.getText().equals("开始")){ // 如果是开始按钮
th = new Thread(obj); // 初始化一个线程(传入obj是因为,TestTimer类实现了Runnable接口,同样我不建议这样做)
count = 0; // count计数器清零
th.start(); // 线程启动
}
else if(btn.getText().equals("暂停")){ // 如果是暂停按钮
th.suspend(); // 线程挂起(这个方法已经被新版本的JDK遗弃,你可以用,但不推荐用)
}
else if(btn.getText().equals("继续")){ // 如果是继续按钮
th.resume(); // 线程恢复(同上)
}
else if(btn.getText().equals("停止")){ // 如果是停止按钮
th.stop(); // 线程停止(同上)
}
}

@Override
public void run() { // 实现Runnable接口的地方
while(true){ // 无限循环(线程一直运行着记录时间)
int ms, seconds, minutes, hours; // 下面一整段都是根据count这个计数器来计算时间
// 你看到最后有一个Thread.sleep(1)表示该线程每毫秒工作一次,起到计数的作用)
String msg = ""; // msg表示Label上显示的时间
hours = (int)(count / 3600000);
minutes = (int)((count - hours * 3600000) / 60000);
seconds = (int)((count - hours * 3600000 - minutes * 60000) / 1000);
ms = (int)(count % 1000);
if(hours < 10){ // 下面这一串是用来做msg的格式
msg += "0" + hours + ":";
}
else{
msg += hours + ":";
}
if(minutes < 10){
msg += "0" + minutes + ":";
}
else{
msg += minutes + ":";
}
if(seconds < 10){
msg += "0" + seconds + ":";
}
else{
msg += seconds + ":";
}
if(ms < 10){
msg += "00" + ms;
}
else if(ms < 100){
msg += "0" + ms;
}
else{
msg += ms;
}

lblTime.setText(msg); // 显示时间到Label上
count++; // 计数器递增
try {
Thread.sleep(1); // 线程挂起1毫秒(也即,线程每毫秒执行一次循环)
}
catch (InterruptedException e) { // 异常处理(不必管,必须这样写)
e.printStackTrace();
}
}
}
}
奔雷剑主wpc
2011-10-26 · TA获得超过214个赞
知道小有建树答主
回答量:284
采纳率:0%
帮助的人:226万
展开全部
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TestTimer extends JFrame implements ActionListener, Runnable {
private static TestTimer obj;
private JButton btnStart;
private JButton btnPause;
private JButton btnResume;
private JButton btnStop;
private JLabel lblTime;
private static Thread th;
private long count;

public TestTimer(){
super("秒表");//小程序标题
btnStart = new JButton("开始");//开始按钮
btnPause = new JButton("暂停");
btnResume = new JButton("继续");
btnStop = new JButton("停止");
lblTime = new JLabel("00:00:00.000");//秒表的初始值
this.setLayout(new FlowLayout());
this.add(btnStart);//添加开始按钮到窗口
this.add(btnPause);
this.add(btnResume);
this.add(btnStop);
this.add(lblTime);
btnStart.addActionListener(this);//给按钮添加点击事件监听器
btnPause.addActionListener(this);
btnResume.addActionListener(this);
btnStop.addActionListener(this);
this.setSize(150, 200);//设置窗口大小
this.setVisible(true);//设置窗口为可见
}

public static void main(String[] args) {
obj = new TestTimer();//运行窗口程序
}

public void actionPerformed(ActionEvent e) {
JButton btn = (JButton)e.getSource();
if(btn.getText().equals("开始")){//点击开始按钮的情况
th = new Thread(obj);
count = 0;
th.start();
}
else if(btn.getText().equals("暂停")){
th.suspend();
}
else if(btn.getText().equals("继续")){
th.resume();
}
else if(btn.getText().equals("停止")){
th.stop();
}
}

public void run() {//运行的线程程序
while(true){
int ms, seconds, minutes, hours;
String msg = "";
hours = (int)(count / 3600000);//计算小时
minutes = (int)((count - hours * 3600000) / 60000);//计算分钟
seconds = (int)((count - hours * 3600000 - minutes * 60000) / 1000);//计算秒
ms = (int)(count % 1000);
if(hours < 10){//下面的主要是你秒表显示内容的算法。
msg += "0" + hours + ":";
}
else{
msg += hours + ":";
}
if(minutes < 10){
msg += "0" + minutes + ":";
}
else{
msg += minutes + ":";
}
if(seconds < 10){
msg += "0" + seconds + ":";
}
else{
msg += seconds + ":";
}
if(ms < 10){
msg += "00" + ms;
}
else if(ms < 100){
msg += "0" + ms;
}
else{
msg += ms;
}

lblTime.setText(msg);
count++;//给毫秒计数
try {
Thread.sleep(1);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
大体就是这样。没写的都是差不多不用说的。还有就是前面的解释依次类推的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式