Distinguish between a single click and a double click in Java

后端 未结 2 426
后悔当初
后悔当初 2020-11-30 07:56

I search the forum and see this codes:

            public void mouseClicked(MouseEvent e) {
            if (e.getClickCount() == 2) {
                System.         


        
相关标签:
2条回答
  • 2020-11-30 08:32

    Sometime it prints out " and it's a single click!" 2 times . It should print out " and it's a double click!").

    That is normal. A double click only happens if you click twice within the specified time interval. So sometimes if you don't click fast enough you will get two single clicks in a row.

    Integer timerinterval = (Integer) Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval"); 
    

    The above line of code determines how fast the double click must be.

    For what its worth here is some code I have used to do the same thing. Don't know if its any better or worse than the code you have:

    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);
         }
    }
    
    0 讨论(0)
  • 2020-11-30 08:53
     public void mouseClicked(MouseEvent evt) { 
       if (evt.getButton()==MouseEvent.BUTTON1){
        leftClick = true; clickCount = 0;
        if(evt.getClickCount() == 2) doubleClick=true;
        Integer timerinterval = (Integer)Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval");
    
                   timer = new Timer(timerinterval, new ActionListener() {
                    public void actionPerformed(ActionEvent evt) {  
                        if(doubleClick){
                            System.out.println("double click.");
                            sb = new StringBuffer();
                            sb.append("Double Click");
                            clickCount++;
                            if(clickCount == 2){                               
                                clickCount=0;
                                doubleClick = false;
                            }
    
                        } else {
    
                            sb = new StringBuffer();
                            sb.append("Left Mouse");
                            System.out.println("single click.");                           
                        }
                    }               
                });
                timer.setRepeats(false);
                timer.start();
                if(evt.getID()==MouseEvent.MOUSE_RELEASED) timer.stop();
    }           
    
    0 讨论(0)
提交回复
热议问题