Как получить местоположение щелчка мыши относительно окна поворота
Скажем, что я нахожусь в Java Swing JFrame. Я нажимаю на мышь. Я хочу получить местоположение щелчка мыши в графическом интерфейсе. В java строка
int mouseX = MouseInfo.getPointerInfo().getLocation.x;
Кажется, нужно указать местоположение мыши на весь экран. Как мне получить его по отношению к графическому интерфейсу?
Ответы
Ответ 1
Из MouseListener
методов, которые вы можете сделать:
@Override
public void mouseClicked(MouseEvent e) {
int x=e.getX();
int y=e.getY();
System.out.println(x+","+y);//these co-ords are relative to the component
}
Просто добавьте это в свой Component
:
component.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
}
});
Справка:
Ответ 2
Посмотрите Component.getMousePosition
.
Возвращает позицию указателя мыши в этом пространстве координат Component
, если Component
находится непосредственно под указателем мыши, в противном случае возвращает null
. Если Component
не отображается на экране, этот метод возвращает значение null, даже если указатель мыши находится над областью, где будет отображаться Component
. Если Component
частично или полностью закрыт другими Component
или родными окнами, этот метод возвращает значение не null
, только если указатель мыши находится над незакрашенной частью Component
.
final Point mousePos = component.getMousePosition();
if (mousePos != null) {
final int mouseX = mousePos.x;
final int mouseY = mousePos.y;
...
}
... или, если вы используете MouseListener
, вы можете увидеть мой оригинальный комментарий...
Попробуйте использовать MouseEvent.getPoint
.
Вышеупомянутое вернет точку мыши относительно компонента, к которому был привязан слушатель.
public void mouseClicked(final MouseEvent evt) {
final Point pos = evt.getPoint();
final int x = pos.x;
final int y = pos.y;
}
Ответ 3
Вы можете добавить компонент MouseListener
в GUI, верхний левый пиксель которого должен быть создан как [0,0], и получить x и y из MouseEvent
JFrame frame = new JFrame();
JPanel panel = new JPanel();
frame.add(panel);
panel.addMouseListener(new MouseAdapter() {// provides empty implementation of all
// MouseListener`s methods, allowing us to
// override only those which interests us
@Override //I override only one method for presentation
public void mousePressed(MouseEvent e) {
System.out.println(e.getX() + "," + e.getY());
}
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200, 200);
frame.setVisible(true);
Ответ 4
MouseEvent имеет методы getX() и getY(), которые возвращают позицию относительно исходного компонента.