Получение точных координат мыши в Java - PullRequest
1 голос
/ 03 февраля 2011

Хорошо, я знаю, КАК это сделать, но он делает что-то странное.

Я пытаюсь получить правильные координаты XY для появления JMenu.Я нашел способ, но это всего лишь взлом.Все щелчки правой кнопкой происходят на JList, пока я не добавлю панель персонажей, так что, скажем, вы щелкаете правой кнопкой рядом с верхним левым.Вы ожидаете, что координата Y будет около 40 ~ пикселей, а координата Y будет около 100 ~ пикселей, верно?Потому что вы нажимаете в левом нижнем углу, где JList.Неправильно.Координаты xy отсчитываются в верхнем левом углу JList, когда я хочу, чтобы они отсчитывались в верхнем левом углу ВСЕГО приложения.: S

Итак, что я сделал?Так как координата Y верна, я добавил 512 пикселей к координате X, чтобы она всегда была в JList.Вот так:

                int newMouseX = 512+e.getX();
                popup.show(tileOffline.this, newMouseX, e.getY()); // show item at mouse

Однако, как вы можете сказать, я не буду щелкать правой кнопкой мыши в JList вечно.

Как мне сделать так, чтобы я получал точные координаты XY мыши из ВСЕГО апплета?

Вот картинка, описывающая ситуацию БЕЗ взлома 512: enter image description here

Ответы [ 4 ]

4 голосов
/ 03 февраля 2011

Интересно, ты делаешь это сложнее, чем нужно. Всплывающее меню позиционируется относительно компонента, который вы передаете в метод show ( JPopupMenu API ). Вы должны просто показать всплывающему меню, что-то вроде этого, чтобы оно отображалось в правильном месте:

popup.show(myJList, e.getX(), e.getY());
2 голосов
/ 03 февраля 2011

SwingUtilities имеет методы, подходящие для преобразования в и из экранных координат, а также среди Components.

1 голос
/ 03 февраля 2011

Вы можете использовать convertPointToScreen в javax.swing.SwingUtilities для преобразования в координаты экрана - просто передайте компонент, который вы щелкаете!

convertPointToScreen(Point p, Component c)

http://download.oracle.com/javase/6/docs/api/javax/swing/SwingUtilities.html

0 голосов
/ 03 февраля 2011

Используйте методы MouseEvent.getXOnScreen() и MouseEvent.getYOnScreen().

MouseEvent, который генерируется при перемещении или щелчке мышью, содержит абсолютные координаты на экране. Используйте эти два метода, чтобы получить их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...