测量鼠标的持续时间?

时间:2015-07-22 15:15:11

标签: java jbutton mouselistener

我正在开发一款涉及按钮的游戏。我希望能够根据按下按钮显示图像的时间长度,即:

x =秒按钮被保留

如果3.1秒> x> 2.9秒

然后 显示图像1

如果x< 2.9或x> 3.1

然后 显示图像2

我如何使用鼠标监听器对其进行编程?

谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用以下代码段来解决问题 -

double startTime, endTime, holdTime;
boolean flag = false;

@Override
public final void mousePressed(final MouseEvent e) {
    startTime = System.nanoTime();
    flag = true;
}

@Override
public final void mouseReleased(final MouseEvent e) {
    if(flag) {
        endTime = System.nanoTime();
        flag = false;
    }
    holdTime = (endTime - startTime) / Math.pow(10,9);
}

holdTime会为您提供敲击鼠标的时间(以秒为单位)。

答案 1 :(得分:0)

关于使用System.nanoTime(),有不同的意见。 看看:Is System.nanoTime() completely useless?

为了更安全,您可以编写自己的类,使用Runnable接口计算毫秒数。

按下鼠标时,启动包含Runnable界面的线程。 并在释放鼠标时中断它。

Runnable类包含计算已用时间的代码。

请考虑以下代码段:

public class TimeThread implements Runnable{
    int timeElapsed = 0;
    public int getTimeElapsed() {
        return timeElapsed;
    }
   @Override
   public void run(){
        while(true){
             try{
                 Thread.sleep(1);
                 timeElapsed = timeElapsed + 1;
             }catch(InterruptedException ex) {
                 break;
              }
        }     
    }
}

使用上面编写的TimeThread类来计算鼠标按下和释放期间所经过的时间:

       Thread timeCalculationThread;
       TimeThread timeCalculator;

 public void mousePressed(MouseEvent me) {
    timeCalculator = new TimeThread();
    timeCalculationThread = new Thread(timeCalculator);
    timeCalculationThread.start();

}

@Override
public void mouseReleased(MouseEvent me) {
    timeCalculationThread.interrupt();
    System.out.println("Stopped! time elapsed is "+timeCalculator.getTimeElapsed()+" milliseconds");           
    try {
        timeCalculationThread.join();
        System.out.println("Thread has joined");
    } catch (InterruptedException ex) {
        Logger.getLogger(MouseFrame.class.getName()).log(Level.SEVERE, null, ex);
    }
}