所以我有以下每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) {
}
}
它将在指针所在的坐标中传递,并且我创建了一个if语句来检测指针何时位于按钮上方。现在使用布尔值mouseDown
,我需要弄清楚如何检测点击和双击。
单击一下我需要检测mouseDown
何时为真,然后为假(我不知道该怎么做),双击,我想我会用System.currentTimeMillis();
来查看如果发生两次。
除了使用mouseDown
之外,请不要推荐别的东西我必须在其他代码之上构建它,我需要坚持使用这种方法。
答案 0 :(得分:0)
因此,当在同一位置生成mousePressed和mouseReleased事件时,会生成鼠标单击。
因此,在您的方法的上下文中,您需要在同一位置获取mouseDown == true和mouseDown == false。
双击取决于同一位置的2个mouseDown == false事件之间的时间。
因此,您需要确定上述两个事件之间的时间间隔,以确定何时发生双击。
执行此操作的一种方法是在收到第一个mouseDown == false时启动Timer。如果定时器触发,则表示您没有收到任何其他事件,因此您只需单击鼠标即可。
但是,在计时器触发之前接收到第二个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);
}
}
此代码的要点是在生成双击事件时不生成第一个单击事件。
在您的情况下,如果事件在时间段内,您可能希望生成单击,然后双击。显然代码需要改变。我只想演示使用Timer来确定双击时间框架内是否发生了两次点击的概念。
因此,在您的情况下,代码会更简单一些。您可以将代码添加到update(...)
方法中。每次收到mouseDown == false时,都会检查Timer。
如果定时器正在运行,则双击(并停止定时器)
如果Timer没有运行,只需单击一下(然后重新启动Timer)。
如果Timer触发事件,则停止Timer。
答案 1 :(得分:0)
声明两个if语句并让其中一个在鼠标为true时设置一个等于true的全局变量,然后设置另一个if语句来检测该全局变量是否为true以及鼠标是否未关闭。
这是sudo代码:
if(mouse is down)
{
click=true;
}
if(click == true && mouse is not down)
{
we have a click!
}