1

我有一个扩展JLabel类,我使用下面的代码绘制我的地图:这new AffineTransform()是留下我的图像的身份(0,0,w,h)

 mygraphics2D = (Graphics2D) getGraphics();
 graphics2D.scale(2.0,2.0) ;
 graphics2D.rotate(....
 graphics2D.drawImage(myImageIcon.getImage(),new AffineTransform(), this);

现在,当我单击我的JLabel使用此事件时:

public void mouseClicked(MouseEvent e) {
x =e.getX() ;
y = e.getY();
NewX = ????
NewY = ????
}

我想检索我尝试过的新坐标“缩放、旋转...坐标”

Point2D ptSrc = new Point2D.Double(x, y);
Point2D ptDst = new Point2D.Double(0, 0);
mygraphics2D.getTransform().transform(ptSrc, ptDst);

但是 ptDst 与(缩放,旋转,..)坐标不同,请帮助!

4

3 回答 3

4

听起来您需要正向和逆变换来在两个坐标系之间进行转换。在这个例子中,比例方程是明确的;在这种替代方法中,使用了第二个AffineTransform

于 2012-08-06T02:14:01.327 回答
1

我发现了这些:

不知道他们会不会帮忙。

于 2012-08-06T01:21:40.087 回答
1

它不是那么难;-)

  1. 当您重新绘制组件时,AffineTransform在转换后保存g2.getTransform()

  2. 然后调用invert()它上面的函数

  3. 如果mouseClicked()我们使用以下代码:

    Point2D p= trans.transform(new Point2D.Double(evt.getX(), evt.getY()), null);
    System.out.println("click x="+p.getX()+" y="+p.getY());
    

就是这样!

于 2013-09-22T12:23:05.857 回答