在jframe中设置光标的位置

时间:2012-07-11 00:11:34

标签: java cursor position jframe mouseevent

我有一个使用以下代码的程序:

public void mouseMoved(MouseEvent e) {
    mousex = e.getX();
    mousey = e.getY();

    if(mousex >= 700) {
        try {
            Robot robot = new Robot();

            robot.mouseMove(0, 0);
        } catch (AWTException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

    }
    if(mousex <= 100) {
        Robot robot;
        try {
            robot = new Robot();
            robot.mouseMove(0, 0);
        } catch (AWTException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

    }
}

除了一件事之外,所有这些都很好。它设置光标在屏幕上的位置而不是jframe。此外,当我说if(mousex&gt; = 700)时,它也从屏幕上获取它。我需要知道如何将其更改为jframe。感谢。

2 个答案:

答案 0 :(得分:3)

在屏幕上获取JFrame的位置,然后相应地转换鼠标位置。扩展组件的所有对象(包括JFrame)都具有方法getLocationOnScreen()。再次,使用此方法,获取JFrame的位置,然后找到鼠标的相对位置,无论它在哪里,以及您想要它的位置。

这可以用小学代数来解决。

修改
您可能希望只创建一次Robot对象,只需在需要时使用该对象,而不是每次都重新创建它。

答案 1 :(得分:3)

您可以获得的东西,

  1. JFrame在屏幕上的位置。
  2. 一旦您知道屏幕上的位置,您就可以添加它们(x,y)并在JFrame中获取新位置。
  3. 如果计算后的位置超过JFrame的大小,则将x或y设置为JFrame的最大当前大小(如果协调完全是动态的)
  4. 视觉上是这样的,

    enter image description here

    在上图中,JFrame屏幕上的位置是(50,50),这意味着JFrame内的组件的坐标变为(0,0)。现在,在JFrame内的屏幕上获取鼠标位置,您可以在JFrame中说出一些随机所需的坐标,然后将这些屏幕位置50添加到其中。