Java swing timer-timer.stop()with actionListeners&接口

时间:2018-03-02 12:22:15

标签: java timer interface listeners

我在理解Java中的接口/监听器时显然遇到了问题。 (红色的Java新手警报)。 使用https://docs.oracle.com/javase/7/docs/api/javax/swing/Timer.html和接口示例,我从timer.stop获取我不理解的行为,和/或从计时器中删除actionlisteners(即,触发'tick')。 无论我做什么,我都无法在使用界面等时停止计时器 - 我只能让它在本地课程中使用=意大利面条代码。

public void actionPerformed(ActionEvent e) {
    SimpleDateFormat sdf = new SimpleDateFormat("mm:ss");
    JButton clicked= (JButton) e.getSource();
    ClockLabel mainsClockList= new ClockLabel(mainsLab);

    if (clicked==clock1But) {
        /////////  Clock not started
        if  (mainsRunning==false)  {
            //mainsClockList = new ClockLabel(mainsLab);     // that starts 
                                                // it, wait for FB in listnr

            mainsClockList.setStopWatchListener(new StopWatchListener() {
                public void clockCount(long count)  {
                    System.out.println("Clock fired");     // fired every 
                                          //click- should only be on attach
                                        //  multiple calls button or EL?
                    mainsLab.setText(sdf.format(count));

                }
            });
            clock1But.setText("Stop");
            mainsRunning=true;
        }
        //// clock already started
        else if  (mainsRunning== true)  {
            System.out.println("in butt pressed already run");
            mainsClockList.stopClock();
            mainsClockList.setEnabled(false);
            mainsRunning=false;

        }



    }

    else if  (clicked==clock2But)   {           
        System.out.println("Got 2nd but");   }
    else if  (clicked==clock3But)   {       
        System.out.println("Got 3rd but");   }
}

Clock Lab课程: -

public ClockLabel(JLabel labIn) {       
    sdf = new SimpleDateFormat("mm:ss");
    t= new Timer(500, this );
    t.start();

}

public void actionPerformed(ActionEvent e) {    
    // this is listener for t....       
    Date d= new Date();
    long diff=  d.getTime() -cStarted.getTime();
    swListener.clockCount(diff);
}
public void stopClock()     {
    System.out.println("In CL, called stopclock");
    t.stop();                                   // no effect
    swListener= null;                       // no effect
    System.out.println("swListener := null");   
    // swListener.wait(5000);                null pointer on try catch so 
                                             //has killed sw....!
}

public void setStopWatchListener(StopWatchListener listener) {
    this.swListener= listener;
}

}

Interface

public interface StopWatchListener {
    public void clockCount(long count);
}

我尝试尽量减少代码,但请继续提供帮助。感谢任何指针,非常感谢。 系统输出如下,只需单击1按钮即可开始,一个停止:

时钟已解雇 时钟被解雇 时钟被解雇 时钟被解雇 在对接已按下已经运行 在CL中,称为stopclock swListener:= null 时钟被解雇 时钟被解雇 时钟被解雇 时钟被解雇

0 个答案:

没有答案