Java 秒表程序

Java 秒表程序,java,swing,Java,Swing,我的JavaI类有一个秒表程序,它来自JavaFoundations3rdEditionPP6.22,我很难让它运行。我不确定哪里出了错。任何帮助破译的问题将不胜感激!该程序应该有一个3个按钮的设置,秒表以秒计,没有什么新奇的。我的按钮本身有问题,我无法让它们启动、停止和重置计时器。我使用Jgrasp作为我的编译器,它可以很好地编译。没有要报告的错误。我不确定我的if/else语句是否正确,或者我是否遗漏了不让计时器开始计数的内容。任务如下:设计并实现一个作为秒表的应用程序。包括以秒为单位显示时

我的JavaI类有一个秒表程序,它来自JavaFoundations3rdEditionPP6.22,我很难让它运行。我不确定哪里出了错。任何帮助破译的问题将不胜感激!该程序应该有一个3个按钮的设置,秒表以秒计,没有什么新奇的。我的按钮本身有问题,我无法让它们启动、停止和重置计时器。我使用Jgrasp作为我的编译器,它可以很好地编译。没有要报告的错误。我不确定我的if/else语句是否正确,或者我是否遗漏了不让计时器开始计数的内容。任务如下:设计并实现一个作为秒表的应用程序。包括以秒为单位显示时间增量的显示器。包括允许用户启动和停止时间以及将显示重置为零的按钮

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class Assignment_6_22_Panel extends JPanel
{
  private JButton start, stop, reset;
  private JLabel label;
  private JPanel buttonPanel;
  private Timer timer; 
  private int time = 0;
  private final int DELAY = 1000;


public Assignment_6_22_Panel()
{
  label = new JLabel("Time: " + time);
  setBackground(Color.white);

  start = new JButton("Start");
  stop = new JButton("Stop");
  reset = new JButton("Reset");

  ButtonListener listener = new ButtonListener();
  TimeListener watchListener = new TimeListener();

  timer = new Timer(DELAY, watchListener);

  start.addActionListener(listener);
  stop.addActionListener(listener);
  reset.addActionListener(listener);



  buttonPanel = new JPanel();
  buttonPanel.setPreferredSize(new Dimension(200, 150));
  buttonPanel.setBackground(Color.white);
  buttonPanel.add(start);
  buttonPanel.add(stop);
  buttonPanel.add(reset);
  add(buttonPanel);
  add(label);

}


private class ButtonListener implements ActionListener
{

  public void actionPerformed(ActionEvent event)
  {
     if (event.getSource() == start)
        timer.start();

     else
         if (event.getSource() == stop)
            timer.stop();
         else
            time = 0;

  }
 }

private class TimeListener implements ActionListener
{

  public void actionPerformed(ActionEvent event)
  {

        label = new JLabel("Your Time: " + time);


  }
 }
}
这是相邻的代码

 import java.awt.*;
 import java.awt.event.*;
 import javax.swing.*;

 public class Assignment_6_22
 {
 //-----------------------------------------------------------------
 //  Displays the main frame of the program.
 //-----------------------------------------------------------------
  public static void main(String[] args)
  {
  JFrame frame = new JFrame("Stop Watch");
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  frame.getContentPane().add(new Assignment_6_22_Panel());

  frame.pack();
  frame.setVisible(true);
  }
 }

您的
计时器
代码和
按钮列表器
代码工作正常,问题在于您的
计时器列表器

private class TimeListener implements ActionListener {

    public void actionPerformed(ActionEvent event) {

        label = new JLabel("Your Time: " + time);

    }
}
每次触发
计时器
时,您都在创建
JLabel
的新实例,这与屏幕上显示的内容无关,相反,您需要设置先前存在的标签的文本

另外,无需实际更新
time
的值来显示时间的流逝

private class TimeListener implements ActionListener {

    public void actionPerformed(ActionEvent event) {

        time++;
        label.setText("Your Time: " + time);

    }
}
当您重置
计时器时,还应确保更新
标签

private class ButtonListener implements ActionListener {

    public void actionPerformed(ActionEvent event) {
        if (event.getSource() == start) {
            timer.start();
        } else if (event.getSource() == stop) {
            timer.stop();
        } else {
            time = 0;
            label.setText("Your Time: " + time);
        }

    }
}

那你有什么问题?解释一下你的问题。你的程序是做什么的?它应该做什么?你有错误吗?如果是这样,请添加堆栈跟踪,并在代码中标记错误发生的位置。当您收到错误时,请包含准确的错误消息,而不仅仅是说“某处有错误”。错误消息包含一些重要信息,这些信息提示了错误所在和位置。对不起,我编辑了我的问题。非常感谢,我对这个网站和Java非常陌生。这非常有帮助。再次感谢你!