如何在JMapViewer中向MapMarker添加工具提示

我正在尝试将ToolTip添加到JMapViewer上的自定义MapMarker 。 但重复搜索并没有帮助我解决这个问题。

自定义MapMarker是:

 public class MapMarkerUnit extends MapObjectImpl implements MapMarker 

并且Paint Method overide是

 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)); } 

感谢您提供的任何帮助。

覆盖JMapViewergetToolTipText()方法。 在您的实现中,使用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在后台加载图像。

作为具体的迭代示例, JFreeChart以这种方式轻松处理数十个实体的工具提示。 这是封闭面板的getToolTipText()实现,这里是调用Shape#contains()的循环 。