Obter posição do mouse


109

Eu gostaria de simular um movimento natural do mouse em Java (indo daqui para lá pixel por pixel). Para fazer isso, preciso saber as coordenadas de partida.

Encontrei o método event.getX () e event.getY (), mas preciso de um evento ...

Como posso saber as posições sem fazer nada (ou algo não visível)?

Obrigado

Respostas:


205

MouseInfo.getPointerInfo (). GetLocation () pode ser útil. Ele retorna um objeto Point correspondente à posição atual do mouse.


46
getPointerInfo().getLocation()retorna a posição relativa à tela. Se você quiser a posição relativa ao seu componente (como fornecida por MouseListeners), você pode subtrair yourComponent.getLocationOnScreen()dela.
Thomas Ahle

2
O +1 Container.getMousePosition()pode retornar algumas vezes nullse o mouse estiver se movendo muito rápido, usando isso evita o problema.
Emily L.

11
Além do que @ThomasAhle disse, você pode evitar implementá-lo sozinho, usando um método de conveniência já implementado:SwingUtilities.convertPointFromScreen(MouseInfo.getPointerInfo().getLocation(), component)
Andrei Vajna II

1
Note MouseInfo.getPointerInfo()pode retornar null quando não há mouse ou em algumas configurações multimon.
NateS

2
Observe que SwingUtilities.convertPointFromScreen(..)converte o primeiro argumento no local e não retorna nada, portanto, ele precisa ser escrito de forma um pouco diferente em relação ao comentário @AndreiVajnaII para que possamos obter o Pointobjeto.
Evgeni Sergeev

42
PointerInfo a = MouseInfo.getPointerInfo();
Point b = a.getLocation();
int x = (int) b.getX();
int y = (int) b.getY();
System.out.print(y + "jjjjjjjjj");
System.out.print(x);
Robot r = new Robot();
r.mouseMove(x, y - 50);

18
Por favor, adicione na próxima vez alguns comentários.
CSchulz

10

No SWT, você não precisa estar em um ouvinte para chegar à localização do mouse. O objeto Display possui o método getCursorLocation().

No vanilla SWT / JFace, ligue Display.getCurrent().getCursorLocation().

Em um aplicativo RCP, chame PlatformUI.getWorkbench().getDisplay().getCursorLocation().

Para aplicativos SWT, é preferível usar em getCursorLocation()vez do MouseInfo.getPointerInfo()que outros mencionaram, pois o último é implementado no kit de ferramentas AWT que o SWT foi projetado para substituir.


6
import java.awt.MouseInfo;
import java.awt.GridLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;

import javax.swing.*;

public class MyClass {
  public static void main(String[] args) throws InterruptedException{
    while(true){
      //Thread.sleep(100);
      System.out.println("(" + MouseInfo.getPointerInfo().getLocation().x + 
              ", " + 
              MouseInfo.getPointerInfo().getLocation().y + ")");
    }
  }
}

6
import java.awt.MouseInfo;
import java.util.concurrent.TimeUnit;

public class Cords {

    public static void main(String[] args) throws InterruptedException {

        //get cords of mouse code, outputs to console every 1/2 second
        //make sure to import and include the "throws in the main method"

        while(true == true)
        {
        TimeUnit.SECONDS.sleep(1/2);
        double mouseX = MouseInfo.getPointerInfo().getLocation().getX();
        double mouseY = MouseInfo.getPointerInfo().getLocation().getY();
        System.out.println("X:" + mouseX);
        System.out.println("Y:" + mouseY);
        //make sure to import 
        }

    }

}

4

Tente examinar a classe java.awt.Robot. Ele permite que você mova o mouse de maneira programática.



1

Estou fazendo algo assim para obter as coordenadas do mouse usando o Robot. Uso ainda mais essas coordenadas em alguns dos jogos que estou desenvolvendo:

public class ForMouseOnly {
    public static void main(String[] args) throws InterruptedException {
        int x = MouseInfo.getPointerInfo().getLocation().x;
        int y = MouseInfo.getPointerInfo().getLocation().y;
        while (true) {

            if (x != MouseInfo.getPointerInfo().getLocation().x || y != MouseInfo.getPointerInfo().getLocation().y) {
                System.out.println("(" + MouseInfo.getPointerInfo().getLocation().x + ", "
                        + MouseInfo.getPointerInfo().getLocation().y + ")");
                x = MouseInfo.getPointerInfo().getLocation().x;
                y = MouseInfo.getPointerInfo().getLocation().y;
            }
        }
    }
}

0

Se estiver usando o SWT, você pode querer adicionar um MouseMoveListener conforme explicado aqui .


4
mas o Listener é executado apenas se eu fizer algo (mover, clicar) com meu mouse, certo? A primeira coisa que preciso antes de movê-lo é saber a posição inicial
Martin Trigaux,

0

No meu cenário, eu deveria abrir uma caixa de diálogo na posição do mouse com base em uma operação da GUI feita com o mouse. O código a seguir funcionou para mim:

    public Object open() {
    //create the contents of the dialog
    createContents();
    //setting the shell location based on the curent position
    //of the mouse
    PointerInfo a = MouseInfo.getPointerInfo();
    Point pt = a.getLocation();
    shellEO.setLocation (pt.x, pt.y);

    //once the contents are created and location is set-
    //open the dialog
    shellEO.open();
    shellEO.layout();
    Display display = getParent().getDisplay();
    while (!shellEO.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
    return result;
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.