MapPanel: Java Swing Map API - PullRequest
       2

MapPanel: Java Swing Map API

3 голосов
/ 10 сентября 2011


Я пытаюсь вставить представление карты в приложение Java Swing, чтобы пользователь мог визуализировать и редактировать свои записанные маршруты .gpx.
Я видел в этом обсуждении людей, рекомендующих MapPanelAPI, однако я не могу найти никакой документации.Я могу вставить карту в свое приложение, однако мне нужно больше документации для понимания функций API.Кто-нибудь может мне помочь в этом вопросе?Это то, что у меня есть:

MapPanel mapPanel = new MapPanel();
mapPanel.setBounds(276, 77, 722, 632);
frame.add(mapPanel);

Проблемы:
1) Я не могу отключить информационное окно, отображаемое перед картой

mapPanel.getOverlayPanel().setVisible(!mapPanel.getOverlayPanel().isVisible()); //disable the overlay info box
mapPanel.getControlPanel().setVisible(!mapPanel.getControlPanel().isVisible()); //disable the overlay control box

2) Можно ли рисовать маршруты поверх карты?
3) Можно ли добавлять путевые точки на карту?

Спасибо за помощь;)
Filipe

Ответы [ 2 ]

4 голосов
/ 10 сентября 2011

1) Глядя на исходный код, который они публикуют, я буду подражать тому, что они делают при создании моего графического интерфейса MapPanel, что-то вроде этого

import java.awt.Dimension;
import javax.swing.*;
import com.roots.map.MapPanel.Gui;

public class TestMapPanel {
   public static void main(String[] args) {

      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            Gui mapPanel = new Gui();
            mapPanel.setPreferredSize(new Dimension(722, 632));

            JMenuBar menuBar = mapPanel.createMenuBar();


            JFrame frame = new JFrame("Map Panel Test");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().add(mapPanel);
            frame.setJMenuBar(menuBar);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
         }
      });      
   }
}

Затем пользователь может выбрать, хотят ли они просматривать информационную панель или нет, просто проверив JCheckBoxMenuItem, который соответствует информационной панели.

2) и 3) Все возможно, но вам нужно изучить исходный код, чтобы узнать, как лучше всего выполнять эти и другие вещи.

Изменить, чтобы избавиться от панели поиска при запуске, я прибег к kludge:

        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        SwingUtilities.invokeLater(new Runnable() {
           public void run() {
              for (int i = 0; i < menuBar.getMenuCount(); i++) {
                 JMenu menu = menuBar.getMenu(i);
                 if ("View".equals(menu.getText())) {
                    int componentCount = menu.getMenuComponentCount();
                    for (int j = 0; j < componentCount; j++) {
                       Component c = menu.getMenuComponent(j);
                       if (c instanceof JCheckBoxMenuItem) {
                          JCheckBoxMenuItem chkBoxMenuItem = (JCheckBoxMenuItem) c;
                          String text = chkBoxMenuItem.getText();
                          if ("Show SearchPanel".equals(text)) {
                             chkBoxMenuItem.doClick();
                          }
                       }
                    }
                 }
              }
           }
        });

Это не должно быть таким неуклюжим, и если я правильно читаю и интерпретирую исходный код, то я считаю, что источник мог бы быть лучше.

0 голосов
/ 01 ноября 2011

Хотя это не ответ на мой вопрос, я использовал JXMapViewer из Swingx API для реализации того, что я хотел. Спасибо за ваши ответы, хотя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...