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

Jawaban:


206

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


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

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.


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

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



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

0

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


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;
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.