Java-鼠标离开窗口

Java-鼠标离开窗口,java,swing,jframe,awt,mouselistener,Java,Swing,Jframe,Awt,Mouselistener,我如何知道鼠标是否从我制作的窗口中弹出,以及从哪一侧退出。我正在做一个经典的乒乓球游戏,当我把鼠标移得太快时,“东西”会停留一些像素。我想把它移到它离开的窗口边缘 private class MouseMotion extends MouseAdapter{ public void mouseMoved(MouseEvent e) { super.mouseMoved(e); int x = e.getX(); p1.move(x);

我如何知道鼠标是否从我制作的窗口中弹出,以及从哪一侧退出。我正在做一个经典的乒乓球游戏,当我把鼠标移得太快时,“东西”会停留一些像素。我想把它移到它离开的窗口边缘

private class MouseMotion extends MouseAdapter{
    public void mouseMoved(MouseEvent e) {
        super.mouseMoved(e);
        int x = e.getX();
        p1.move(x);
    }
}
还有移动功能

public void move(int x) {
    if (x < 0  ) {
        this.x = 0;
    }else if(x+width > Main.screenSize.width - 1){
        this.x = Main.screenSize.width - width - 1;
    } else {
        this.x = x;
    }
}
公共作废移动(int x){
if(x<0){
这个.x=0;
}否则如果(x+width>Main.screenSize.width-1){
这个.x=Main.screenSize.width-width-1;
}否则{
这个.x=x;
}
}

我只需要知道一种知道鼠标是否在窗口外的方法。

检查。

检查。

您可以使用MouseExited()然后使用event.getPoint()从生成的事件中获取坐标。

您可以使用MouseExited()然后使用event.getPoint()从生成的事件中获取坐标.

您可能需要查看以下内容:

Point mouse = MouseInfo.getPointerInfo().getLocation();

这表明指针在屏幕上。无论您的应用程序是否具有焦点。无论指针是否位于窗口顶部。

您可能需要查看以下内容:

Point mouse = MouseInfo.getPointerInfo().getLocation();

这表明指针在屏幕上。无论您的应用程序是否具有焦点。不管指针是否在你的窗口顶部。

试着把它放在一个可以运行的地方,摆脱MouseMotion类c'是p1正在被吸引到的JComponent,我不知道您在代码中称该对象为什么“running”是设置为true的布尔值。运行此代码时,p1将根据鼠标移动,直到“running”设置为false

new Thread(()->{
    while(running) {
        p1.move(MouseInfo.getPointerInfo().getLocation().getX()-c.getLocationOnScreen());
    }
}).start();

试着把它放在可以运行的地方,摆脱MouseMotion类c'是p1正在被吸引到的JComponent,我不知道您在代码中称该对象为什么“running”是设置为true的布尔值。运行此代码时,p1将根据鼠标移动,直到“running”设置为false

new Thread(()->{
    while(running) {
        p1.move(MouseInfo.getPointerInfo().getLocation().getX()-c.getLocationOnScreen());
    }
}).start();

MouseExited()
没有这样的方法(给定的Java方法名称区分大小写)。
MouseExited()
没有这样的方法(给定的Java方法名称区分大小写)。然后将此代码放在MouseListener.move()块中,对吗?把它放在游戏循环的其他地方。然后你把这个代码放在一个mouseStener.move()块中,对吗?将它放在游戏循环中的其他地方。这不是有点晚了吗?@usama8800堆栈交换不仅仅是为了让人们可以回答自己的问题,它是为了让具有相同问题的其他人可以找到已经回答的问题,并且只需要在以前没有人问过的情况下提问。我发布了一个答案,以便其他有类似问题的人可以在这里找到正确的答案,因为这里已经没有好的答案,我不得不在另一个网站上寻找答案。我在这里回答了这个问题,这样其他任何有这个问题的人都可以在不等待回答的情况下得到答案。这不是有点晚了吗?@usama8800 Stack exchange不仅仅是为了让人们能够回答自己的问题,它是为了让其他有相同问题的人能够找到已经回答的问题,如果以前没有人问过,你只需要问一个问题。我发布了一个答案,以便其他有类似问题的人可以在这里找到正确的答案,因为这里已经没有好的答案,我不得不在另一个网站上寻找答案。我在这里回答了这个问题,所以任何其他有这个问题的人都可以得到答案,如果他们不必等待回答。