2012-08-06 64 views
1

我得到了一個擴展的JLabel類,我使用以下代碼繪製我的地圖: new AffineTransform()是保留我的圖像的身份(0,0,w,h)無法獲取我的座標graphics2D mouseclick java

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 = ???? 
} 

我想找回我的新座標「的縮放,旋轉...... COORDS」我試圖

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

但ptDst不同於(縮放,旋轉,..)座標,請任何幫助!

+0

*我想檢索我的新座標「縮放,旋轉......座標」*爲什麼?它們有什麼相關性,或者縮放/旋轉?這應該實現什麼功能? – 2012-08-06 00:47:47

+0

我有一張可以轉換(縮放,旋轉,翻譯)的地圖,&我想通過點擊'JLabel'來添加對象,這樣新對象將位於新座標 – S3ddi9 2012-08-06 00:50:21

+0

我認爲AndrewThompson是正確的。您是否真的需要在點擊時應用轉換,或者您是否可以讓繪製過程爲您處理? – MadProgrammer 2012-08-06 00:51:36

回答

4

這聽起來像你需要一個正向和反向變換來在兩個座標系之間進行轉換。在這個example中,縮放方程是明確的;在此alternate approach中,使用第二個AffineTransform

+0

這正是我想要的,從一個縮放JPanel中檢索鼠標座標,我不明白爲什麼沒有人理解,即使它的書面???,謝謝@垃圾箱 – S3ddi9 2012-08-06 02:25:53

+0

不客氣。感謝評論者的澄清和@finw爲一個工作的例子;許多參考文獻僅僅表明這是可能的。 – trashgod 2012-08-06 02:33:39

0

它不是那麼難;-)

  1. 當你重新繪製組件保存AffineTransformg2.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()); 
    

那就是它!