Reputation: 2366
Say I'm in a Java Swing JFrame. I click my mouse. I want to get the location of the mouse click within the GUI. In java, the line
int mouseX = MouseInfo.getPointerInfo().getLocation.x;
Seems to give the location of the mouse on the entire screen. How would I get it's location relative to the GUI?
Upvotes: 22
Views: 121352
Reputation: 124275
You can add MouseListener
to GUI component whose top left pixel should be threated as [0,0] point, and get x and y from 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);
Upvotes: 8
Reputation: 36423
From MouseListener
methods you can do:
@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
}
Simply add this to your Component
by:
component.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
}
});
Reference:
Upvotes: 26
Reputation: 29656
Take a look at Component.getMousePosition
.
Returns the position of the mouse pointer in this
Component
's coordinate space if theComponent
is directly under the mouse pointer, otherwise returnsnull
. If theComponent
is not showing on the screen, this method returns null even if the mouse pointer is above the area where theComponent
would be displayed. If theComponent
is partially or fully obscured by otherComponent
s or native windows, this method returns a non-null
value only if the mouse pointer is located above the unobscured part of theComponent
.
final Point mousePos = component.getMousePosition();
if (mousePos != null) {
final int mouseX = mousePos.x;
final int mouseY = mousePos.y;
...
}
... or, if you use a MouseListener
, you may see my original comment...
Try using
MouseEvent.getPoint
.
The above will return the mouse point relative to the component to which the listener was bound.
public void mouseClicked(final MouseEvent evt) {
final Point pos = evt.getPoint();
final int x = pos.x;
final int y = pos.y;
}
Upvotes: 10
Reputation: 29139
MouseEvent has methods getX() and getY() that return the position relative to the source component.
Upvotes: 3