当用户将鼠标指针移动到JFrame
的某个区域稍微延迟时,我想显示JPanel
。我通过将JFrame
附加到MouseAdapter
并覆盖JPanel
方法来显示MouseMove
。
addMouseListener(new MouseAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
Point p= e.getLocationOnScreen();
//check if Point p is within the boundaries of a rectangle.
//show a JFrame
}
});
为了获得延迟,我认为我应该使用Thread
来使用sleep
,条件是如果鼠标移出边界必须中断它,但是我&# 39;我不确定这是最好的方法。
目前,我只看到与JavaScript相关的SO问题。在Java中使用它的最佳方法是什么?
答案 0 :(得分:1)
您可以使用mouseEntered
课程中的mouseExited
和MouseAdapter
个活动。
您可以在mouseEntered
方法上设置计时器,并检查在对象上花费的时间是>=
mouseExited
方法中的指定时间,如果是,请执行操作。< / p>
对于鼠标在同一点离开的场景,你可以使用Timer
延迟你想要的秒数,并在mouseExited
设置一个处理程序来停止计时器指针在指定时间之前退出。
答案 1 :(得分:1)
使用java.util.Timer
可能是一个很好的解决方案。
addMouseListener(new MouseAdapter() {
private int delay = 1000;//1 second
private Timer timer = null;
private int startTime =0;
@Override
public void mouseMoved(MouseEvent e) {
Point p= e.getLocationOnScreen();
boolean pointInArea=false;
//check if Point p is within the boundaries of a rectangle.
if(pointInArea){
//A JFrame is queued to be shown
if(System.currentTimeMillis()-startTime>delay){
//A JFrame has been already shown, then show a new one
startTime = System.currentTimeMillis();
timer = new Timer();
timer.schedule(new TimerTask(){
@Override
public void run() {
//LAUNCH JFrame
}
}, delay);
}
}
else (!pointInArea && timer != null){
timer.cancel();
timer = null;
}
}
});