在java中识别双击

Sur*_*Air 49 java swing double-click mouseevent

我想知道如何在组件中双击鼠标时执行操作.

kal*_*ech 83

public void mouseClicked(MouseEvent event)
{
  if (event.getClickCount() == 2) {
    System.out.println("double clicked");
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 你可能也想检查`event.getButton()== MouseEvent.BUTTON1`,只用鼠标左键计算双击. (2认同)
  • @SeanVanGorder 或`SwingUtilities.isLeftMouseButton(event)` (2认同)

Sea*_*oyd 20

假设您的意思是在Swing中,将MouseListener分配给您的Component:

addMouseListener(new MouseAdapter(){
    @Override
    public void mouseClicked(MouseEvent e){
        if(e.getClickCount()==2){
            // your code here
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

参考:


dav*_*xxx 17

e.getClickCount()==2,如果你想允许用户做多双击在很短的延迟是不够的.您受桌面配置的限制.你可以通过查看结果得到它 Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval");

绕过问题的一个好方法是不使用getClickCount()检查,而是使用一个Timer位置,你可以选择你的点击之间的间隔最大值,并自己处理计数(非常简单).

相关代码:

boolean isAlreadyOneClick;

@Override
public void mouseClicked(MouseEvent mouseEvent) {
    if (isAlreadyOneClick) {
        System.out.println("double click");
        isAlreadyOneClick = false;
    } else {
        isAlreadyOneClick = true;
        Timer t = new Timer("doubleclickTimer", false);
        t.schedule(new TimerTask() {

            @Override
            public void run() {
                isAlreadyOneClick = false;
            }
        }, 500);
    }
}
Run Code Online (Sandbox Code Playgroud)

用Win Xp OS测试并完美.

  • 我看到了两件事:1 /只是每次"else"部分进入时,都会创建一个新的`Timer`对象.我会将此计时器作为对象的一个​​字段移动,以允许从其他位置管理它,例如右键单击或稍微.2 /这些计时器将每隔500毫秒双击一次,然后如果你必须双击两次,那么最后一次不能按预期工作. (2认同)