Ottieni la posizione del mouse


109

Vorrei simulare un movimento naturale del mouse in Java (andando da qui a lì pixel per pixel). Per farlo devo conoscere le coordinate di partenza.

Ho trovato il metodo event.getX () e event.getY () ma ho bisogno di un evento ...

Come posso conoscere le posizioni senza fare nulla (o qualcosa di non visibile)?

Grazie

Risposte:


206

MouseInfo.getPointerInfo (). GetLocation () potrebbe essere utile. Restituisce un oggetto Point corrispondente alla posizione corrente del mouse.


46
getPointerInfo().getLocation()restituisce la posizione relativa allo schermo. Se vuoi la posizione relativa al tuo componente (come quella data da MouseListeners) puoi sottrarla yourComponent.getLocationOnScreen().
Thomas Ahle

2
+1 Container.getMousePosition()può tornare a volte nullse il mouse si muove troppo velocemente, usando questo si evita il problema.
Emily L.

11
Oltre a quanto ha detto @ThomasAhle, puoi evitare di implementarlo da solo, utilizzando un metodo di convenienza già implementato:SwingUtilities.convertPointFromScreen(MouseInfo.getPointerInfo().getLocation(), component)
Andrei Vajna II

1
Nota MouseInfo.getPointerInfo()può restituire null quando non è presente il mouse o in alcune configurazioni multimon.
NateS

2
Nota che SwingUtilities.convertPointFromScreen(..)converte il primo argomento sul posto e non restituisce nulla, quindi deve essere scritto in modo leggermente diverso rispetto al commento @AndreiVajnaII in modo che possiamo ottenere l' Pointoggetto.
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
Si prega di aggiungere la prossima volta alcuni commenti.
CSchulz

10

In SWT non è necessario essere in un ascoltatore per arrivare alla posizione del mouse. L'oggetto Display ha il metodo getCursorLocation().

In vanilla SWT / JFace, chiama Display.getCurrent().getCursorLocation().

In un'applicazione RCP, chiamare PlatformUI.getWorkbench().getDisplay().getCursorLocation().

Per le applicazioni SWT, è preferibile utilizzare getCursorLocation()rispetto a quelle MouseInfo.getPointerInfo()menzionate da altri, poiché quest'ultima è implementata nel toolkit AWT che SWT è stato progettato per sostituire.


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

Prova a guardare la classe java.awt.Robot. Ti consente di muovere il mouse in modo programmatico.



1

Sto facendo qualcosa del genere per ottenere le coordinate del mouse usando Robot, utilizzo ulteriormente queste coordinate in alcuni dei giochi che sto sviluppando:

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 stai usando SWT, potresti voler aggiungere un MouseMoveListener come spiegato qui .


4
ma il Listener viene eseguito solo se faccio qualcosa (muovi, clicca) con il mouse, giusto? La prima cosa di cui ho bisogno prima di muovermi è conoscere la posizione di partenza
Martin Trigaux

0

Nel mio scenario, avrei dovuto aprire una finestra di dialogo nella posizione del mouse in base a un'operazione GUI eseguita con il mouse. Il seguente codice ha funzionato per me:

    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;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.