【问题标题】:How to add a ToolTip to MapMarker in JMapViewer如何在 JMapViewer 中向 MapMarker 添加 ToolTip
【发布时间】:2014-11-14 10:01:35
【问题描述】:

我正在尝试将ToolTip 添加到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));
}

感谢您提供的任何帮助。

【问题讨论】:

    标签: java jmapviewer


    【解决方案1】:

    覆盖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 在后台加载图像,用于example

    作为一个具体的迭代示例,JFreeChart 以这种方式轻松处理大量实体的工具提示。这是封闭面板的getToolTipText() 实现,这是调用Shape#contains()loop。说明该方法的简化示例见 here

    【讨论】:

    • 感谢您的示例 - 我在地图上大约有 50 个标记,因此每次鼠标在地图上移动时都会进行大量迭代。有没有办法直接向图像添加工具提示?我打算尝试在地图上使用带有图标的“jLabel”,但我不相信它们可以显示在 jMapViewer 上
    • 我已经在上面详细说明了。
    • 太好了 - 感谢您向我指出这样一个具体的例子。我会像这样实现它。感谢您的时间和帮助!
    • 实施了您的建议,效果很好!非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 2019-03-08
    • 2023-04-01
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    相关资源
    最近更新 更多