Как добавить всплывающую подсказку в MapMarker в JMapViewer

Я пытаюсь добавить ToolTip на заказ MapMarker на JMapViewer. Но повторные поиски не помогают мне решить эту проблему.

Пользовательский MapMarker:

public class MapMarkerUnit extends MapObjectImpl implements MapMarker

и метод краски 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));
}

Спасибо за любую помощь, которую вы можете предложить.

1 ответ

Решение

Переопределить 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 

Приложение: Есть ли способ добавить всплывающую подсказку непосредственно к изображению?

Нет; JMapViewer это вложение JComponent это обрабатывает подсказки инструмента.

У меня есть около 50 маркеров на карте... это много итераций.

Вы определенно не можете загружать изображения в свой MapMarker реализация; использовать SWingWorker загружать изображения в фоновом режиме, например.

В качестве конкретного примера итерации, JFreeChart таким образом легко обрабатывает подсказки для множества объектов. Вот ограждающая панель getToolTipText() реализация, и вот цикл, который вызывает Shape#contains(),

Другие вопросы по тегам