2014-09-19 32 views
2

我正在嘗試將ToolTip添加到MapMarkerJMapViewer。但被拒絕的搜索並沒有幫助我解決這個問題。如何在JMapViewer中向MapMarker添加工具提示

定製MapMarker是:

public class MapMarkerUnit extends MapObjectImpl implements MapMarker 

和paint方法超越控制是

public void paint(Graphics g, Point position, int radio) { 
    String filename = "marker.png"; 
    //System.out.print(filename); 
    BufferedImage x = null; 
    try { 
     x = ImageIO.read(getClass().getResource(filename)); 
    } catch (IOException ex) { 
     Logger.getLogger(MapMarkerUnit.class.getName()).log(Level.SEVERE, null, ex); 
    } 

    g.drawImage(x, position.x-16, position.y-37,null); 

    //if(getLayer()==null||getLayer().isVisibleTexts()) paintText(g, new  Point(position.x+20,position.y)); 
} 

感謝所有幫助您可以提供。

回答

4

重寫​​方法JMapViewer。在您的實施中,使用getPosition()MouseEvent座標轉換爲大地座標。下面的例子只是顯示未格式化的座標;您需要找到最近的MapMarker並返回相應的文本。

JMapViewer map = new JMapViewer() { 

    @Override 
    public String getToolTipText(MouseEvent e) { 
     Coordinate c = getPosition(e.getX(), e.getY()); 
     return c.getLat() + " " + c.getLon(); 
    } 
}; 
map.setToolTipText(""); // initialize 

附錄:有沒有直接向圖片添加工具提示的方法?

否; JMapViewer是處理工具提示的封閉JComponent

我在地圖上有大約50個標記......這是很多迭代。

您絕對無法在您的MapMarker實現中加載圖像;使用SWingWorker在後臺加載圖像,對於example

作爲一個具體的迭代示例,JFreeChart以這種方式輕鬆處理了許多實體的工具提示。以下是封閉式面板的實現,其中loop調用Shape#contains()

+0

感謝這個例子 - 我在地圖上有大約50個標記,所以每次鼠標在地圖上移動時都會有很多迭代。有沒有直接向圖片添加工具提示的方法?我打算嘗試使用帶地圖圖標的'jLabel',但我不相信它們可以顯示在上面詳細闡述的jMapViewer – KieranS 2014-09-20 14:45:08

+0

上。 – trashgod 2014-09-21 02:27:24

+0

非常好 - 感謝您指點我這樣一個具體的例子。我會看着像這樣實現它。感謝您的時間和幫助! – KieranS 2014-09-21 19:47:02