如果用户按下 JList 组件超过 3 秒,有什么方法可以捕获事件吗?
我发现困难的部分是即使在用户松开鼠标左键之前也需要触发事件。(这可以通过 mousePressed 和 mouseReleased 组合轻松完成)
您可以在 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)