加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 将鼠标保持在Ellipse2D中

发布时间:2020-12-15 02:35:57 所属栏目:Java 来源:网络整理
导读:我知道如何将我的鼠标(我的g.draw(mouseX,mouseY)光标)保持在Ellipse2D / Shape中… @Overridepublic void mouseMoved(MouseEvent e) { int x = e.getX(),y = e.getY(); if(shape.contains(x,y)) { mouseMoveX = e.getX(); mouseMoveY = e.getY(); }} …但是
我知道如何将我的鼠标(我的g.draw(mouseX,mouseY)光标)保持在Ellipse2D / Shape中…

@Override
public void mouseMoved(MouseEvent e) {
    int x = e.getX(),y = e.getY();
    if(shape.contains(x,y)) {
        mouseMoveX = e.getX();
        mouseMoveY = e.getY();
    }
}

…但是当鼠标离开所述形状时(直到它返回),这将完全锁定运动. IE即使实际光标移动,它仍保持在相同的位置.我希望鼠标能够在椭圆周围移动,即使实际光标已经出来.你们中的许多人可能仍然感到困惑,对不起,如果需要更多的解释,我很乐意帮忙.另外,这里的第一个问题,如果我违反任何规则,请告诉我!谢谢.

PS:对于任何迟到的回复,目前在拨号上网:(

解决方法

最简单的方法是使用 java.awt.Robot类,它允许您直接控制鼠标和键盘:

import java.awt.Robot;

...

Robot robot = new Robot(<your GraphicsDevice>);

...

@Override
public void mouseMoved(MouseEvent e) {
    int x = e.getX(),y)) {
        mouseMoveX = e.getX();
        mouseMoveY = e.getY();
    }
    else {
        robot.mouseMove(mouseMoveX,mouseMoveY); // Assuming these are the previous coordinates.
    }
}

编辑:好的,试试这个:

@Override
public void mouseMoved(MouseEvent e) {
    int x = e.getX(),y = e.getY();
    if (shape.contains(x,y)) {
        mouseMoveX = e.getX();
        mouseMoveY = e.getY();
    }
    else {
        // get angle of rotation
        double r = Math.atan2(y-shape.getCenterY(),x-shape.getCenterX());
        mouseMoveX = (int) (shape.getWidth()/2 * Math.cos(r) + shape.getCenterX());
        mouseMoveY = (int) (shape.getHeight()/2 * Math.sin(r) + shape.getCenterY());
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读