Dapatkan Posisi Mouse

109

Saya ingin mensimulasikan gerakan mouse alami di Jawa (pergi dari sini ke sana piksel demi piksel). Untuk melakukan itu saya perlu mengetahui koordinat awal.

Saya telah menemukan metode event.getX () dan event.getY () tetapi saya membutuhkan acara ...

Bagaimana saya bisa mengetahui posisi tanpa melakukan apapun (atau sesuatu yang tidak terlihat)?

Terima kasih

Martin Trigaux
sumber

Jawaban:

206

MouseInfo.getPointerInfo (). GetLocation () mungkin bisa membantu. Ini mengembalikan objek Point yang sesuai dengan posisi mouse saat ini.

vpram86
sumber
46
getPointerInfo().getLocation()mengembalikan posisi relatif terhadap layar. Jika Anda menginginkan posisi relatif terhadap komponen Anda (seperti yang diberikan oleh MouseListeners) Anda dapat menguranginya yourComponent.getLocationOnScreen().
Thomas Ahle
2
+1 Container.getMousePosition()dapat beberapa kali kembali nulljika mouse bergerak terlalu cepat, menggunakan ini untuk menghindari masalah.
Emily L.
11
Selain apa yang dikatakan @ThomasAhle, Anda dapat menghindari penerapannya sendiri, dengan menggunakan metode kenyamanan yang sudah diterapkan:SwingUtilities.convertPointFromScreen(MouseInfo.getPointerInfo().getLocation(), component)
Andrei Vajna II
1
Note MouseInfo.getPointerInfo()dapat mengembalikan null jika tidak ada mouse atau di beberapa pengaturan multimon.
NateS
2
Perhatikan bahwa SwingUtilities.convertPointFromScreen(..)mengonversi argumen pertama di tempat dan tidak mengembalikan apa pun, jadi perlu ditulis sedikit berbeda relatif terhadap komentar @AndreiVajnaII sehingga kita bisa mendapatkan Pointobjeknya.
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
sumber
18
Silakan tambahkan beberapa komentar lain kali.
CSchulz
10

Di SWT Anda tidak perlu menjadi pendengar untuk mendapatkan lokasi mouse. Objek Tampilan memiliki metode getCursorLocation().

Di vanilla SWT / JFace, panggil Display.getCurrent().getCursorLocation().

Dalam aplikasi RCP, panggil PlatformUI.getWorkbench().getDisplay().getCursorLocation().

Untuk aplikasi SWT, lebih baik digunakan getCursorLocation()daripada MouseInfo.getPointerInfo()yang telah disebutkan orang lain, karena yang terakhir diimplementasikan dalam toolkit AWT yang dirancang untuk diganti oleh SWT.

stevorino
sumber
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
sumber
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
sumber
4

Coba lihat kelas java.awt.Robot. Ini memungkinkan Anda untuk menggerakkan mouse secara terprogram.

Jeff Storey
sumber
1

Saya melakukan sesuatu seperti ini untuk mendapatkan koordinat mouse menggunakan Robot, saya menggunakan koordinat ini lebih jauh di beberapa game yang saya kembangkan:

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
sumber
0

Jika Anda menggunakan SWT, Anda mungkin ingin melihat menambahkan MouseMoveListener seperti yang dijelaskan di sini .

Topher Fangio
sumber
4
tetapi Pendengar dijalankan hanya jika saya melakukan sesuatu (bergerak, klik) dengan mouse saya, bukan? Hal pertama yang saya perlukan sebelum memindahkannya adalah mengetahui posisi awal
Martin Trigaux
0

Dalam skenario saya, saya seharusnya membuka kotak dialog di posisi mouse berdasarkan operasi GUI yang dilakukan dengan mouse. Kode berikut berfungsi untuk saya:

    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
sumber