55

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

4

4 回答 4

95
public void mouseClicked(MouseEvent event)
{
  if (event.getClickCount() == 2 && event.getButton() == MouseEvent.BUTTON1) {
    System.out.println("double clicked");
  }
}
于 2010-10-29T12:09:02.970 回答
22

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

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

参考:

于 2010-10-29T12:16:07.463 回答
20

如果您想让您的用户在短时间内执行多次双击,这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);
    }
}

经 Win Xp 操作系统测试,完美。

于 2013-09-24T19:48:37.517 回答
0

我的问题是,如果用户单击,我必须以一种方式响应,如果他们单击不止一次,则必须以另一种方式响应(当我多次单击时,我的 Swing VM 似乎最多可以计数四次单击)。当我运行上面的示例时,它似乎将三次单击计为一次单击。所以,这是我的重写。基本上,我只有一个计划任务,等待灰尘清除,然后检查注册的点击次数。400 毫秒的等待似乎最适合我。

JButton jButton = new JButton("Click Me!");
jButton.addMouseListener(new MouseAdapter() {
    private int eventCnt = 0;
    java.util.Timer timer = new java.util.Timer("doubleClickTimer", false);

    @Override
    public void mouseClicked(final MouseEvent e) {
        eventCnt = e.getClickCount();
        if ( e.getClickCount() == 1 ) {
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    if ( eventCnt == 1 ) {
                        System.err.println( "You did a single click.");
                    } else if ( eventCnt > 1 ) {
                        System.err.println("you clicked " + eventCnt + " times.");
                    }
                    eventCnt = 0;
                }
            }, 400);
        }
    }
});
于 2019-03-31T17:29:53.530 回答