Отримайте положення миші


109

Я хотів би імітувати природний рух миші на Яві (переходячи звідси туди пікселем за пікселем). Для цього мені потрібно знати початкові координати.

Я знайшов метод event.getX () та event.getY (), але мені потрібна подія ...

Як я можу знати позиції, не роблячи нічого (або чогось не видно)?

Дякую

Відповіді:


205

MouseInfo.getPointerInfo (). GetLocation () може бути корисним. Він повертає об'єкт Point, що відповідає поточному положенню миші.


46
getPointerInfo().getLocation()повертає положення відносно екрана. Якщо ви хочете, щоб позиція щодо вашого компонента (наприклад, надана MouseListeners), ви можете відняти yourComponent.getLocationOnScreen()з неї.
Томас Ейл

2
+1 Container.getMousePosition()може іноді повернутися, nullякщо миша рухається занадто швидко, використовуючи це уникне проблеми.
Емілі Л.

11
На додаток до того, що сказав @ThomasAhle, ви можете уникнути його реалізації самостійно, використовуючи вже реалізований метод зручності:SwingUtilities.convertPointFromScreen(MouseInfo.getPointerInfo().getLocation(), component)
Андрій Вайна II,

1
Примітка MouseInfo.getPointerInfo()може повернути нуль, якщо немає миші або в деяких мультимонових налаштуваннях.
NateS

2
Зауважте, що SwingUtilities.convertPointFromScreen(..)перетворює перший аргумент на місці і нічого не повертає, тому його потрібно записати дещо інакше відносно коментаря @AndreiVajnaII, щоб ми могли отримати Pointоб'єкт.
Євгеній Сергєєв

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
Будь ласка, додайте наступного разу кілька коментарів.
CSchulz

10

У SWT вам не потрібно бути слухачем, щоб дістатися до місця миші. Об'єкт відображення має метод getCursorLocation().

У ванільній SWT / JFace зателефонуйте Display.getCurrent().getCursorLocation().

У додатку RCP телефонуйте PlatformUI.getWorkbench().getDisplay().getCursorLocation().

Для SWT-додатків бажано використовувати getCursorLocation()над тим, MouseInfo.getPointerInfo()що згадували інші, оскільки останні реалізовані в наборі інструментів AWT, який 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 
        }

    }

}



1

Я роблю щось подібне, щоб отримати координати миші за допомогою робота, ці координати я використовую далі в кількох іграх, які я розробляю:

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, вам варто поглянути на додавання MouseMoveListener, як пояснено тут .


4
але слухач виконується лише в тому випадку, якщо я щось роблю (рухаюся, клацаю) мишкою, правда? Перше, що мені потрібно перед його переміщенням - це знати вихідну позицію
Мартін Тріго

0

У моєму сценарії я повинен був відкрити діалогове вікно в положенні миші на основі операції з графічним інтерфейсом, виконаної з мишею. Наступний код працював для мене:

    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;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.