有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java中的双击

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


共 (4) 个答案

  1. # 1 楼答案

    假设您的意思是在Swing中,为组件指定一个鼠标侦听器:

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

    参考资料:

  2. # 2 楼答案

    public void mouseClicked(MouseEvent event)
    {
      if (event.getClickCount() == 2 && event.getButton() == MouseEvent.BUTTON1) {
        System.out.println("double clicked");
      }
    }
    
  3. # 3 楼答案

    如果希望允许用户在短时间内进行多次双击,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操作系统和perfect进行测试

  4. # 4 楼答案

    我的问题是,如果用户单击一次,我必须以一种方式响应,如果他们单击多次,我必须以另一种方式响应(当我多次单击时,我的Swing虚拟机似乎能够计数到四次单击)。当我运行上面的示例时,似乎将三次单击视为一次单击。这是我的重写。基本上,我只是有一个预定的任务,等待灰尘清除,然后检查注册的点击次数。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);
            }
        }
    });