2

我正在尝试在JMapViewerToolTip上添加一个自定义。但是反复搜索并没有帮助我解决这个问题。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));
}

感谢您提供的任何帮助。

4

1 回答 1

5

覆盖 的getToolTipText()方法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 

附录:有没有办法直接向图像添加工具提示?

不; JMapViewerJComponent处理工具提示的附件。

我在地图上有大约 50 个标记……这是很多迭代。

你绝对不能在你的MapMarker实现中加载图像;使用 aSWingWorker在后台加载图像,例如.

作为一个具体的迭代示例,JFreeChart以这种方式轻松处理数十个实体的工具提示。这是封闭面板的getToolTipText()实现,这里调用Shape#contains(). 在这里可以看到一个说明该方法的简化示例。

于 2014-09-20T01:53:29.767 回答