How to add a ToolTip to MapMarker in JMapViewer
Asked Answered
C

1

2

I'm trying to add a ToolTip to a custom MapMarker on JMapViewer. But repeaded searches on are not helping me solve this.

The custom MapMarker is:

public class MapMarkerUnit extends MapObjectImpl implements MapMarker

and the Paint Method overide is

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

Thanks for any help your able to offer.

Carbide answered 19/9, 2014 at 18:24 Comment(0)
G
5

Override the getToolTipText() method of JMapViewer. In your implementation, use getPosition() to convert the MouseEvent coordinates into geodetic coordinates. The example below simply displays the unformatted coordinates; you'll want to find the nearest MapMarker and return the appropriate text.

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 

Addendum: Is there a way of adding a tooltip directly to an image?

No; JMapViewer is the enclosing JComponent that handles tool tips.

I have about 50 markers on the map…that's a lot of iterations.

You definitely can't load images in your MapMarker implementation; use a SWingWorker to load images in the background, for example.

As a concrete iteration example, JFreeChart easily handles tool tips for scores of entities in this way. Here's the enclosing panel's getToolTipText() implementation, and here's the loop that invokes Shape#contains(). A simplified example that illustrates the approach is seen here.

Gropius answered 20/9, 2014 at 1:53 Comment(4)
Thanks for the example - I have about 50 markers on the map, so that's a lot of iterations every time the mouse moves on the map. Is there a way of adding a tooltip directly to an image? I was going to try with using a 'jLabel' with an icon to the map but I don't believe they can be shown on a jMapViewerCarbide
I've elaborated above.Gropius
That's excellent - Thanks for pointing me towards such a concrete example. I'll look to implement it like this. Thanks for your time and help!Carbide
Implemented your suggestion and it worked perfectly! many thanks for all your help.Carbide

© 2022 - 2024 — McMap. All rights reserved.