我试图在Java Swing应用程序中插入Map View,以便用户可视化和编辑他记录的.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)我可以在地图上插入航点吗?
感谢您的帮助;)
菲利普
答案 0 :(得分:4)
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)一切皆有可能,但你需要研究源代码,看看如何最好地完成这些和其他事情。
编辑,为了摆脱启动时的搜索面板,我使用了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();
}
}
}
}
}
}
});
它不应该是这个笨重的,如果我正确地阅读和解释源代码,那么我认为源可能更好。
答案 1 :(得分:0)
虽然这不是我的问题的答案,但我使用了Swingx API中的JXMapViewer来实现我想要的。谢谢你的答案。