Mausposition abrufen

109

Ich möchte eine natürliche Mausbewegung in Java simulieren (Pixel für Pixel von hier nach dort). Dazu muss ich die Startkoordinaten kennen.

Ich habe die Methoden event.getX () und event.getY () gefunden, aber ich brauche ein Ereignis ...

Wie kann ich die Positionen kennen, ohne etwas zu tun (oder etwas, das nicht sichtbar ist)?

Danke dir

Martin Trigaux
quelle

Antworten:

205

MouseInfo.getPointerInfo (). GetLocation () kann hilfreich sein. Es gibt ein Point- Objekt zurück, das der aktuellen Mausposition entspricht.

vpram86
quelle
46
getPointerInfo().getLocation()Gibt die Position relativ zum Bildschirm zurück. Wenn Sie die Position relativ zu Ihrer Komponente (wie von MouseListeners angegeben) möchten, können Sie davon subtrahieren yourComponent.getLocationOnScreen().
Thomas Ahle
2
+1 Container.getMousePosition()kann manchmal zurückkehren, nullwenn sich die Maus zu schnell bewegt. Dadurch wird das Problem vermieden.
Emily L.
11
Zusätzlich zu dem, was @ThomasAhle gesagt hat, können Sie die Implementierung selbst vermeiden, indem Sie eine bereits implementierte Convenience-Methode verwenden:SwingUtilities.convertPointFromScreen(MouseInfo.getPointerInfo().getLocation(), component)
Andrei Vajna II
1
Hinweis MouseInfo.getPointerInfo()kann null zurückgeben, wenn keine Maus vorhanden ist oder in einigen Multimon-Setups.
NateS
2
Beachten Sie, dass SwingUtilities.convertPointFromScreen(..)das erste Argument direkt konvertiert wird und nichts zurückgibt. Daher muss es im Vergleich zum Kommentar @AndreiVajnaII etwas anders geschrieben werden, damit wir das PointObjekt erreichen können.
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);
Nauman Khalid
quelle
18
Bitte fügen Sie beim nächsten Mal einige Kommentare hinzu.
CSchulz
10

In SWT müssen Sie sich nicht in einem Listener befinden, um an die Mausposition zu gelangen. Das Anzeigeobjekt hat die Methode getCursorLocation().

Rufen Sie in Vanilla SWT / JFace an Display.getCurrent().getCursorLocation().

Rufen Sie in einer RCP-Anwendung auf PlatformUI.getWorkbench().getDisplay().getCursorLocation().

Für SWT-Anwendungen ist es vorzuziehen, getCursorLocation()die von MouseInfo.getPointerInfo()anderen erwähnten zu verwenden, da letztere in dem AWT-Toolkit implementiert sind, das SWT ersetzen soll.

stevorino
quelle
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 + ")");
    }
  }
}
Srb
quelle
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 
        }

    }

}
Josh McQuinn
quelle
4

Schauen Sie sich die Klasse java.awt.Robot an. Sie können die Maus programmgesteuert bewegen.

Jeff Storey
quelle
1

Ich mache so etwas, um Mauskoordinaten mit Robot zu erhalten. Ich verwende diese Koordinaten in einigen der Spiele, die ich entwickle, weiter:

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;
            }
        }
    }
}
Varun Ved
quelle
0

Wenn Sie SWT verwenden, sollten Sie einen MouseMoveListener hinzufügen, wie hier erläutert .

Topher Fangio
quelle
4
aber der Listener wird nur ausgeführt, wenn ich etwas mit der Maus mache (bewegen, klicken), oder? Das erste, was ich brauche, bevor ich mich bewege, ist die Startposition zu kennen
Martin Trigaux
0

In meinem Szenario sollte ich ein Dialogfeld an der Mausposition öffnen, basierend auf einer mit der Maus ausgeführten GUI-Operation. Der folgende Code hat bei mir funktioniert:

    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;
}
Sudipn
quelle