Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java鼠标侦听器:切换版本;单击计数器";_Java_Swing_Mouselistener - Fatal编程技术网

Java鼠标侦听器:切换版本;单击计数器";

Java鼠标侦听器:切换版本;单击计数器";,java,swing,mouselistener,Java,Swing,Mouselistener,我试图在Java中使用鼠标事件创建一个基本的点击计数器。我知道每个人都有教程,但他们的程序是半自动的,每次点击都会增加一次 public void mouseClicked(MouseEvent e) { clicks++; } 我试图做一个完全自动的版本,它将不断增加,直到你释放按钮,但释放方法不会将布尔值切换为false并停止循环。有什么建议吗 public class example{ private boolean fire = false; public

我试图在Java中使用鼠标事件创建一个基本的点击计数器。我知道每个人都有教程,但他们的程序是半自动的,每次点击都会增加一次

public void mouseClicked(MouseEvent e) 
   { 
       clicks++;
   }
我试图做一个完全自动的版本,它将不断增加,直到你释放按钮,但释放方法不会将布尔值切换为false并停止循环。有什么建议吗

public class example{
private boolean fire = false;
public void mousePressed(MouseEvent e) 
   { 
       if(e.getButton()== e.BUTTON1){fire = true};
       while(fire) {clickCounter++; }
    }
   }
public void mouseReleased(MouseEvent e){
       fire = false;
}
}
需要明确的是,“点击”通常发生在鼠标被按下和释放之间,在这段时间内有更多的“点击”是一种人工构造

首先,您需要阅读以更好地理解while“sleep”和
while loop
在这种情况下不起作用。您正在阻止事件调度线程,阻止处理任何新事件

下面的示例只是尝试计算鼠标按下和释放事件之间的时间,并对结果应用人工乘数来创建“单击”计数


另一种解决方案可能是在按下鼠标时启动Swing
计时器,在释放鼠标时停止,允许它增加一个值,然后进入无限
while(true)
循环

要解决此问题,请在循环本身内部修改while循环的布尔语句

while(fire) {
  count++;
  if (mouseReleased(eventMouseIsReleased))
    fire= false;
} // Check while(fire) but now it is false! Move on!

希望这有帮助

“它将不断增加,直到你松开按钮”-你希望每秒点击多少次?您可能还想了解一下当前方法无法在我的原始代码中工作的原因。我有一个睡眠计时器,因此在while循环中增量后,每秒点击3次。我把那部分删掉了因为它很有效,这不是问题,所以我不想让我的问题听起来很混乱。在事件调度线程中无限期地休眠和循环将导致相同的问题。这不会起作用,因为mousedReleased的参数变量是本地的,无法在Pressed方法中访问。不确定您在说什么,如果我没有弄错的话,
private boolean fire
是一个类变量。
mouseerelease
的参数是
MouseEvent e
,因此您可以从其他方法中调用该方法,并传入相应的参数。我不熟悉
MouseEvent
类,这就是为什么我刚刚编写了
eventmouseisleased
来表示适当的
MouseEvent
。我的建议缺少一个
,我将添加它。
while(fire) {
  count++;
  if (mouseReleased(eventMouseIsReleased))
    fire= false;
} // Check while(fire) but now it is false! Move on!