Fare Konumunu Alın


109

Java'da doğal bir fare hareketini simüle etmek istiyorum (buradan oraya piksel piksel gidip). Bunu yapmak için başlangıç ​​koordinatlarını bilmem gerekiyor.

Event.getX () ve event.getY () yöntemlerini buldum ama bir olaya ihtiyacım var ...

Hiçbir şey yapmadan (veya görünmeyen bir şey) pozisyonları nasıl bilebilirim?

teşekkür ederim

Yanıtlar:


206

MouseInfo.getPointerInfo (). GetLocation () yardımcı olabilir. Mevcut fare konumuna karşılık gelen bir Point nesnesi döndürür .


46
getPointerInfo().getLocation()ekrana göre konumu döndürür. Konumun bileşeninize göre olmasını istiyorsanız (MouseListeners tarafından verilen gibi) yourComponent.getLocationOnScreen()ondan çıkartabilirsiniz .
Thomas Ahle

2
+1 , fare çok hızlı hareket ediyorsa Container.getMousePosition()bazen geri dönebilir null, bunun kullanılması sorunu önler.
Emily L.

11
@ThomasAhle'nin söylediklerine ek olarak, zaten uygulanmış bir ikna yöntemini kullanarak bunu kendiniz uygulamaktan kaçınabilirsiniz:SwingUtilities.convertPointFromScreen(MouseInfo.getPointerInfo().getLocation(), component)
Andrei Vajna II

1
Not MouseInfo.getPointerInfo(), fare olmadığında veya bazı multimon kurulumlarında boş döndürebilir.
kabaetler

2
O Not SwingUtilities.convertPointFromScreen(..)biz ele alabilirsiniz böylece @AndreiVajnaII yorumuna farklı göreli biraz yazılması gerekiyor böylece dönüştürür yerinde ilk argüman ve hiçbir şey dönmez Pointnesne.
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
Lütfen bir dahaki sefere yorum ekleyin.
CSchulz

10

SWT'de fare konumuna ulaşmak için bir dinleyicide olmanız gerekmez. Görüntüleme nesnesinin yöntemi vardırgetCursorLocation() .

Vanilya SWT / JFace'de arayın Display.getCurrent().getCursorLocation() .

RCP uygulamasında arayın PlatformUI.getWorkbench().getDisplay().getCursorLocation().

SWT uygulamaları getCursorLocation()için MouseInfo.getPointerInfo(), diğerlerinin bahsettiğinden daha çok kullanılması tercih edilir , çünkü ikincisi, SWT'nin yerini almak üzere tasarlandığı AWT araç setinde uygulanır.


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

Java.awt.Robot sınıfına bakmayı deneyin. Fareyi programlı olarak hareket ettirmenize izin verir.



1

Robot kullanarak fare koordinatlarını elde etmek için böyle bir şey yapıyorum, bu koordinatları geliştirdiğim oyunların birkaçında daha fazla kullanıyorum:

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

SWT kullanıyorsanız, burada açıklandığı gibi bir MouseMoveListener eklemeye bakmak isteyebilirsiniz .


4
ancak Dinleyici yalnızca faremle bir şey yaparsam (hareket et, tıklama) çalıştırılır, değil mi? Hareket etmeden önce ihtiyacım olan ilk şey, başlangıç ​​pozisyonunu
bilmektir

0

Benim senaryomda, fare ile yapılan bir GUI işlemine göre fare konumunda bir iletişim kutusu açmam gerekiyordu. Aşağıdaki kod benim için çalıştı:

    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;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.