J
Jazoon5
Gast
Hallo!
ich bin gerade dabei eine Zooming-Methodik zu coden. Dabei bin ich schon recht weit gekommen, das zoomen funktioniert, jedoch wird immer ausgehend vom Punkt 0,0 gezoomt.
Ich möchte das ganze so hinbiegen, dass genau dort hineingezoomt wird wo die Maus sich gerade befindet.
--> zoomen funktioniert per Scrollen
Hier mein derzeitiger code, welcher relevant für die Zooming-aufgaben sein sollte:
Hat jemand ne Idee wie ich es schaffen könnte, dass er mir zur Mausposition hinzoomt bzw. herauszoomt?
MfG Jazoon5
ich bin gerade dabei eine Zooming-Methodik zu coden. Dabei bin ich schon recht weit gekommen, das zoomen funktioniert, jedoch wird immer ausgehend vom Punkt 0,0 gezoomt.
Ich möchte das ganze so hinbiegen, dass genau dort hineingezoomt wird wo die Maus sich gerade befindet.
--> zoomen funktioniert per Scrollen
Hier mein derzeitiger code, welcher relevant für die Zooming-aufgaben sein sollte:
Code:
/**
* Die Repaint Methode vom JPanel überschreiben
*/
public void paintComponent(Graphics g)
{
g2d = (Graphics2D)g;
AffineTransform at = new AffineTransform();
at.translate(transX, transY);
at.scale(scale, scale);
g2d.setColor(Color.WHITE);
g2d.fillRect(0, 0, getWidth(), getHeight());
g2d.setTransform(at);
map.paintIcon(this, g, 0, 0);
}
private class TransformHandler implements MouseListener, MouseMotionListener{
private int lastOffsetX;
private int lastOffsetY;
public void mouseMoved(MouseEvent arg0) { }
public void mousePressed(MouseEvent arg0) {
//startPunkt capturen
lastOffsetX = arg0.getX();
lastOffsetY = arg0.getY();
}
public void mouseDragged(MouseEvent arg0) {
// neues x und y werden durch die aktuelle Mausposition subtrahierend
// von der vorherigen Mausposition errechnet
int newX = arg0.getX() - lastOffsetX;
int newY = arg0.getY() - lastOffsetY;
// zu den letzten startpunkten wird die neue Distanz durch das draggen addiert
lastOffsetX += newX;
lastOffsetY += newY;
// Die neuen Locations der Karte werden upgedated
transX += newX;
transY += newY;
// ein Repaint durchführen
repaint();
}
public void mouseClicked(MouseEvent arg0) { }
public void mouseEntered(MouseEvent arg0) { }
public void mouseExited(MouseEvent arg0) { }
public void mouseReleased(MouseEvent arg0) { }
}
private class ScaleHandler implements MouseWheelListener{
public void mouseWheelMoved(MouseWheelEvent e) {
if(e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL) {
// Einen passende Zoom-skalierung wählen
// .1 gibt eine passende langsame (flüssige) Zoomphase
scale += (.1 * -e.getWheelRotation());
// man darf natürlich nicht ins negative steigen
// und den scale ganz auf 0 setzen bring auch fehler mit sich!
scale = Math.max(0.00001, scale);
repaint();
}
}
}
}
Hat jemand ne Idee wie ich es schaffen könnte, dass er mir zur Mausposition hinzoomt bzw. herauszoomt?
MfG Jazoon5