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

Antworten:


205

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


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);

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.


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

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



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

0

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


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;
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.