2013-11-14 82 views
2

我使用此代碼獲取放置爲jLable圖標的圖像的X和Y座標。 這個獲得座標的方法是由這個question的回答建議的。多次調用MouseListener

private void lblMapMouseClicked(java.awt.event.MouseEvent evt) {          
      lblMap.addMouseListener(new MouseAdapter() { 
       public void mouseClicked(MouseEvent e) { 
        double X = e.getX(); 
        double Y = e.getY(); 
        System.out.println("X: " + X + "Y: " + Y); 
       } 
      }); 
    } 

當我運行這個public void mouseClicked(MouseEvent e) { }被多次調用。 準確地說我點擊圖片的次數。

例如:如果我第三次點擊它, System.out.println行的X和Y值會打印3次。

它隨着點擊次數的增加而增加。 你們能解釋爲什麼會發生這種情況嗎?我該如何解決它? :)

+0

也許你需要實現某種鼠標向下或鼠標移動功能。 – c0d3Junk13

+0

你究竟建議什麼樣的功能?我曾嘗試在Mouse Pressed事件中使用此代碼,但發生同樣的事情。 – direndd

回答

4

問題在這裏,點擊發生時,您一次又一次地添加新的監聽器。

private void lblMapMouseClicked(MouseEvent evt) 
{ 
    lblMap.addMouseListener(new MouseAdapter() 
    { 
     ... 

而是將您的代碼更改爲此。

private void lblMapMouseClicked(MouseEvent e) 
{ 
    double X = e.getX(); 
    double Y = e.getY(); 
    System.out.println("X: " + X + "Y: " + Y); 
} 

它應該解決問題。

希望這會有所幫助。

+0

是的,它的工作。我不知道爲什麼我添加了額外的addMouselistener。可能是我錯誤地閱讀了前一個問題的答案。無論如何謝謝! :) – direndd

4

它看起來對我來說,每一次的圖像被點擊新的鼠標偵聽器添加..也做

System.out.println(this) 

檢查從鼠標監聽的情況下它實際上是印刷

+0

是的,我認爲你是對的。它創建了多個mouselisteners。這是我得到的輸出。 https://drive.google.com/file/d/0B8JZMxx6Km7oZzJkamEwajFmcGc/edit?usp=sharing 那麼,我該如何解決這個問題? – direndd

+0

@DirenDantanarayana檢查Sri Harsha Chilakapati回答 – smajlo

+0

是的,我試過了,它工作。感謝您的幫助。 :) – direndd