2015-04-01 66 views
0

使用mouseevents,我能夠獲得框架的x和y座標,但我無法獲取面板的x和y座標。下面的代碼是我得到框架的x和y座標。獲取面板的座標

public void mouseMoved(MouseEvent e) { 
    x = e.getX(); 
    y = e.getY(); 
    text = Integer.toString(x) +","+Integer.toString(y); 

    Frame.frame.repaint(); 

} 

下面的代碼是我試圖獲得面板的x和y座標,但它是繪製0代替。 Paint.paint是我的jpanel的名稱。我不知道我做錯了什麼。如果可以的話請幫忙。

public void mouseMoved(MouseEvent e) { 
    x = Paint.paint.getX(); 
    y = Paint.paint.getY(); 
    text = Integer.toString(x) +","+Integer.toString(y); 

    Frame.frame.repaint(); 

} 

回答

2

如果我理解正確的,你的MouseListener與JFrame的註冊,以及你希望得到的X/Y相對於包含的JFrame內的JPanel。 MouseEvent中的x和y指的是MouseListener註冊的組件。如果你有一個父容器註冊的MouseListener,並且得到的MouseEvent相對於子組件的座標,您可以使用SwingUtilities類的座標

public void mousePressed(MouseEvent e){ 
    Point childCoordinate = SwingUtilities.convertPoint(parent, e.getPoint(), child); 
} 
+0

轉換或我可以只添加的MouseListener到面板, 對?我做到了,而且很有效。但我還有一個問題。我將mouselistener添加到框架和麪板,但現在它將爲面板設置座標。不是說我有這個問題,但我只是混淆了爲什麼它爲面板設置它,當我將鼠標監聽器添加到jframe和jpanel。 – Ski 2015-04-01 18:39:57

+0

我不知道你是什麼意思'設置座標'。如果兩個監聽器都設置了相同變量的值,那麼最後通知的值將是最終值。 – copeg 2015-04-01 19:38:50

+0

所以如果我做frame.addMouseListener(事件)並把panel.addMouseListener(事件),它會聽面板,因爲面板是最後一次。好的。我懂了... – Ski 2015-04-01 21:18:41