我正在开发一款涉及按钮的游戏。我希望能够根据按下按钮显示图像的时间长度,即:
x =秒按钮被保留
如果3.1秒> x> 2.9秒
然后 显示图像1
如果x< 2.9或x> 3.1
然后 显示图像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);
}
}