2014-09-19 63 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