I am wondering what is the best way to retrieve the location of a mouse clic after a zoom was made using paintComponent of a panel? (The location relative to this zoom).
Here's the zoom code :
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
if(zoomer==true){
at.scale(zoom,zoom);//at = AffineTransform...
zoomer=false;
}
g2.transform(at);
In my main class, I use a mouse listener private class and override the mouseRelase method :
@Override
public void mouseReleased(MouseEvent e)
e.getX();//Location of the mouse on the X axis
I am drawing different shapes such as dots. Every dot has it's Pixels locations stored so if a create it at X:20 and Y:30 this never changes. When I call paintComponent, it is scaled either bigger or smaller. My problem is, I can clic on the location of these dots on the panel and it gives me some information in some textFields about the dots I clicked on. If the panel has been zoomed in/out, the location of the clic is still the same so let's say I zoom in, the shapes won't be at x:20 and y:30 but at a random location based on the scale. How can I ajust my clic location to this scale?
Not sure if I am making myselft clear so do not hesitate if you need more information.
Thank you
Alright, I have been working all night long and finally figured out how to do this.
First of all here's what happens when I roll the mouse wheel :
The setZoomFactor method does this :
After, when I call repaint() I transform my Graphics2D object to zoom like this :
At this point, nothing really new... My problem was when I clicked on a drawn objet after zoom, I needed to ajust the clic location relative to the zoom factor. In my case, I needed the 0 of the Y axis to be at the bottom left corner instead of top left by default which is why I had to reverse the value based on the panel height :
If you figure out another way to do this or think I did not do it the good way, let me know.
Thank you