我正在尝试在Java Swing应用程序中插入地图视图,以供用户可视化和编辑其记录的.gpx路线。
我在thread中看到有人推荐MapPanel API,但是找不到任何文档。我可以在应用程序中插入地图,但是我需要更多文档来了解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)我可以在地图上插入航点吗?

谢谢你的帮助 ;)
菲利普

最佳答案

1)查看他们发布的源代码,我会模拟他们在创建MapPanel GUI时所做的事情,就像这样

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)一切皆有可能,但是您需要研究源代码以了解如何最好地做到这些。

编辑,为了摆脱启动时的搜索面板,我采取了以下措施:
        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();
                          }
                       }
                    }
                 }
              }
           }
        });

不必太笨拙,如果我正确地阅读和解释了源代码,那么我认为源可能会更好。

10-08 01:37