Java检测鼠标长按

Reu*_*ble 1 java events swing

如果用户按下 JList 组件超过 3 秒,有什么方法可以捕获事件吗?

我发现困难的部分是即使在用户松开鼠标左键之前也需要触发事件。(这可以通过 mousePressed 和 mouseReleased 组合轻松完成)

jam*_*ond 5

您可以在 mouseDown 事件侦听器中设置一个计时器,并在初始延迟 3000 毫秒后每 500 毫秒执行一次。在 mouseReleased 中,您可以取消该计时器。TimerTask在与您关联的对象的 run 方法上,Timer您可以执行所需任务的计算。这是我的解决方案建议:

import javax.swing.*;
import java.awt.event.*;
import java.util.*;

public class Test
{
    public static void main(String[] args)
    {
        final JFrame f = new JFrame();
        String[] data = {"one", "two", "three", "four"};
        JList myList = new JList(data);
        f.add(myList);
        myList.addMouseListener(
            new MouseAdapter()
            {
                private java.util.Timer t;
                public void mousePressed(MouseEvent e)
                {
                    if(t == null)
                    {
                        t = new java.util.Timer();
                    }
                    t.schedule(new TimerTask()
                    {
                        public void run()
                        {
                            System.out.println("My importan task goes here");
                        }
                    },3000,500);
                }

                public void mouseReleased(MouseEvent e)
                {
                    if(t != null)
                    {
                        t.cancel();
                        t = null;
                    }
                }
            }
            );
            f.pack();
            SwingUtilities.invokeLater(new Runnable()
            {
                public void run()
                {
                    f.setVisible(true);
                }
            }
        );
    }
}
Run Code Online (Sandbox Code Playgroud)