2011-03-11 57 views
4

我有一個地圖小程序,並且我有一個JLabel跟隨着鼠標,只要鼠標移過一個城市,JLable就會顯示城市和人口的名稱。是否有一個NO MOTION鼠標監聽器?

我使用mouseMotionListener的MouseMoved方法,但是我希望只有鼠標在城市上空停留幾秒鐘時,標籤纔會在那裏。

我不知道是否因爲我一直在這個代碼上工作了幾天,但我似乎無法想到這個使用MouseMoved方法的解決方案,我嘗試使用計時器,但沒有爲我工作(mayb我只是這是錯誤的,因爲我的大腦被燒壞了)

所以有沒有一個鼠標聽鼠標停留在靜止?或者你有什麼建議?

這裏是多了還是少了什麼我

public void mouseMoved(MouseEvent evt) { 
    int x = evt.getX(); 
    int y = evt.getY(); 
    boolean aboveCity = false; 
    mouseover.setBounds(x+20, y-10, 200, 20); //mouseover is a JLabel 

    for (int i=0;i<cityCounter;i++){ 
     if (city[i].containsPoint(x,y){ 
     name = city[i].getName(); 
     population = city[i].getPopulation(); 
     aboveCity = true; 
     } 
    } 
    if(aboveCity){ 
     mouseover.setText(name + ", " + population); 
    } 
    else{ 
     mouseover.setText(""); 
    } 
} 
+1

無關的建議:一旦找到相關的城市,不要檢查其餘的城市。 – 2011-03-11 01:03:30

回答

10

使用Java javax.swing.Timer中。每當鼠標移動時,重置計時器。當計時器關閉時,只要您的計時器已設置,鼠標一直處於「靜止」狀態。

+0

哇這樣一個簡單的解決方案,它以某種方式設法讓我的思想,而我嘗試了更復雜的方法大聲笑..謝謝 – Alex 2011-03-11 01:07:39

+0

容易一旦你知道「祕密」,但它不是直覺,當你在錯誤的地方看。 – 2011-03-11 01:09:59

+0

+1。 Charles F. Kettering說:「解決方案一旦解決,將變得簡單。」有時候重新定義問題會導致我們找到這個簡單的解決方案。 – corsiKa 2011-03-11 01:14:53