Java 是否使用布尔值检测鼠标单击?

Java 是否使用布尔值检测鼠标单击?,java,Java,因此,我有以下方法,每20毫秒调用一次: public void update(Point mousePosition, boolean mouseDown) { //Creating an if statement that sees if the mouse is above the button if(mousePosition.x > 50 && mousePosition.y > 50 && mousePosition.

因此,我有以下方法,每20毫秒调用一次:

public void update(Point mousePosition, boolean mouseDown) {
    //Creating an if statement that sees if the mouse is above the button   
    if(mousePosition.x > 50 && mousePosition.y > 50 && mousePosition.x < 125 && mousePosition.y < 100) {

    }
}
public void更新(点鼠标位置,布尔鼠标向下){
//创建if语句,查看鼠标是否位于按钮上方
if(mousePosition.x>50&&mousePosition.y>50&&mousePosition.x<125&&mousePosition.y<100){
}
}
它将在指针所在的坐标中传递,我已经创建了一个if语句来检测指针何时位于按钮上方。现在使用布尔值
mouseDown
,我需要找出如何检测单击和双击

对于一次单击,我需要检测
mouseDown
何时为真,何时为假(我不知道如何做),对于双击,我想我将使用
System.currentTimeMillis()
查看是否发生两次


除了使用mouseDown外,请不要推荐其他方法。我必须在其他代码的基础上构建此方法,并且我需要坚持使用此方法。

因此,当在同一位置生成mousePressed和MouseRelease事件时,会生成鼠标单击

因此,在方法的上下文中,需要在同一位置获得mouseDown==true和mouseDown==false

双击由同一位置上两个mouseDown==false事件之间的时间决定

因此,您需要确定上述两个事件之间的时间间隔,以确定双击发生的时间

一种方法是在接收到第一个mouseDown==false时启动计时器。如果计时器触发,则您知道没有收到其他事件,因此您只需单击鼠标即可

但是,在计时器触发两个事件之前,是否接收到第二个mouseDown==false,这两个事件在时间范围内生成,这意味着您有一个双击事件

下面是演示该概念的示例代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class ClickListener extends MouseAdapter implements ActionListener
{
    private final static int clickInterval = (Integer)Toolkit.getDefaultToolkit().
        getDesktopProperty("awt.multiClickInterval");

    MouseEvent lastEvent;
    Timer timer;

    public ClickListener()
    {
        this(clickInterval);
    }

    public ClickListener(int delay)
    {
        timer = new Timer( delay, this);
    }

    public void mouseClicked (MouseEvent e)
    {
        if (e.getClickCount() > 2) return;

        lastEvent = e;

        if (timer.isRunning())
        {
            timer.stop();
            doubleClick( lastEvent );
        }
        else
        {
            timer.restart();
        }
    }

    public void actionPerformed(ActionEvent e)
    {
        timer.stop();
        singleClick( lastEvent );
    }

    public void singleClick(MouseEvent e) {}
    public void doubleClick(MouseEvent e) {}

    public static void main(String[] args)
    {
        JFrame frame = new JFrame( "Double Click Test" );
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frame.addMouseListener( new ClickListener()
        {
            public void singleClick(MouseEvent e)
            {
                System.out.println("single");
            }

            public void doubleClick(MouseEvent e)
            {
                System.out.println("double");
            }
        });
        frame.setSize(200, 200);
        frame.setVisible(true);
     }
}
此代码的要点是在生成双击事件时不生成第一个单击事件

在您的情况下,如果事件在时间段内,您可能希望生成一次单击,然后再生成一次双击。所以很明显,代码需要更改。我只是想演示使用计时器来确定双击时间范围内是否发生了两次单击的概念

因此,在您的情况下,代码会简单一些。将代码添加到
更新(…)
方法中。每次收到mouseDown==false时,都会检查计时器

如果计时器正在运行,则双击(并停止计时器)

如果计时器没有运行,只需单击一下(然后重新启动计时器)


如果计时器触发事件,则停止计时器。

声明两个if语句,并让其中一个在鼠标为true时将全局变量设置为true,然后设置另一个if语句,该语句将检测该全局变量是否为true以及鼠标是否未按下

以下是sudo代码:

if(mouse is down)
{
   click=true;
}
if(click == true && mouse is not down)
{
   we have a click!
}

为什么你不使用一个可以检测鼠标何时在组件上或鼠标何时被按下/释放的工具?因为我需要在其他人编写的代码之上构建这个工具,我不允许修改它。你可以使用java swing来听你的鼠标。我不懂这个设计。你是说你有两个独立的JVM在运行,你以某种方式将JFrame及其所有组件的位置传递给第二个JVM吗?我不这么认为,按照向我解释的方式,我基本上理解为方法被调用,还有另一个类在坐标中输入,不管鼠标是否按下。