-1

大家好,我是java新手... :(我只想让我的按钮(开始)启动一个计时器,但我想用'if'自动停止计时器,例如...当用户输入时间并且计时器到达它停止的计时器......到目前为止我的编码是这样的......

private void startTimerActionPerformed(java.awt.event.ActionEvent evt) {                                               

        javax.swing.Timer tm = new javax.swing.Timer(100, new ActionListener()
        {
            public void actionPerformed (ActionEvent evt) {
                AddOneActionPerformed(evt);
            }   
        });

        tm.start();

        int getTM,getM,getTS,getS,Secs,tenSec,Mins,tenMin;

        getTM = Integer.parseInt(enterTenMins.getText());
        getM = Integer.parseInt(enterOneMins.getText());
        getTS = Integer.parseInt(enterTenSecs.getText());
        getS = Integer.parseInt(enterOneSecs.getText());

        tenMin = Integer.parseInt(tenMins.getText());
        Mins = Integer.parseInt(oneMins.getText());
        tenSec = Integer.parseInt(tenSecs.getText());
        Secs = Integer.parseInt(oneSecs.getText());
    }                                    

并且AddOneActionPerformed(evt)

private void AddOneActionPerformed(java.awt.event.ActionEvent evt) {                                       
        int dd,Secs,tenSec,Mins,tenMin;

        tenMin = Integer.parseInt(tenMins.getText());
        Mins = Integer.parseInt(oneMins.getText());
        tenSec = Integer.parseInt(tenSecs.getText());
        Secs = Integer.parseInt(oneSecs.getText());
        dd= Integer.parseInt(digitValue.getText());
        dd= dd+1;


        if (dd==10)
            dd = 0;

        if (Secs == 10)
            Secs = 0;

        if (dd==0)
            Secs=Secs +1;

        if (tenSec>=6)
            tenSec = 0;

        if (Secs==10)
            tenSec=tenSec +1;

        if (Mins==10)
            Mins = 0;

        if (tenSec==6)
            Mins=Mins+1;

        if (tenMin>=6)
            tenMin=0;

        if (Mins==10)
            tenMin=tenMin+1;

        String ss = Integer.toString(dd);
        digitValue.setText(ss);

        String ff = Integer.toString(Secs);
        oneSecs.setText(ff);

        String gg = Integer.toString(tenSec);
        tenSecs.setText(gg);

        String hh = Integer.toString(Mins);
        oneMins.setText(hh);

        String jj = Integer.toString(tenMin);
        tenMins.setText(jj);

        showDigitActionPerformed(evt);
        showOneSecsActionPerformed(evt);
        showTenSecsActionPerformed(evt);
        showOneMinsActionPerformed(evt);
        showTenMinsActionPerformed(evt);

    }
4

1 回答 1

2

您可以从 ActionEvent 的getSource()方法中获取 Timer 实例,然后对其调用 stop。所以,...

// for your Timer's ActionListener
@Override
public void actionPerformed(ActionEvent evt) {
   if (someStoppingConditionIsTrue) {
      Timer timer = (Timer) evt.getSource();
      timer.stop();
   } else {
      // code to call repeatedly
   }
}

请注意,您有两个不同的问题,应该分别解决。上面的代码是一种使用某种条件从其自己的 ActionListener 中停止 Timer 的方法。您的另一个问题是如何获取用户输入以允许您更改该条件,这将涉及独立于上述 Timer 代码的单独代码。

另外考虑:

  • 使用两个 JSpinner 为用户输入分钟和秒。
  • 给你的班级一个 int totalTime 字段。
  • 在您的 startTimerActionPerformed 方法中设置此值。
  • 使用对 System.getSystemTime() 的调用中的差异,让 Timer 的 ActionListener 根据测量的经过时间减少此值。
  • 计算得到 totalTime 和 elapsedTime 之间的差异(以毫秒为单位),例如称为 timeLeft
  • 从 timeLeft 计算你的分钟和秒。
  • 然后使用格式化的字符串在 JLabel 中显示这些值,比如String.format("%02d:%02d", minutes, seconds).
  • 当 timeLeft == 0 时,即停止计时器。
于 2014-11-09T22:46:12.227 回答