2011-09-10 19 views
3


我試圖在用戶的Java Swing應用程序中插入一個Map View來可視化和編輯他錄製的.gpx路線。
我在這裏看到thread人推薦MapPanel API,但是我找不到任何文檔。我可以在我的應用程序中插入地圖,但是我需要更多文檔來了解API功能。 任何人都可以幫助我解決這個問題?這是我到目前爲止有:MapPanel:Java Swing Map 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

請參閱編輯 –

回答

0

雖然這不是我的問題的答案,但我使用了Swingx API中的JXMapViewer來實現我想要的功能。儘管感謝您的答案。

4

1)看,他們發佈的源代碼,我會模仿他們做什麼我創建GUI 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)任何事情都是可能的,但您需要研究源代碼以瞭解如何最好地完成這些和其他事情。

編輯,擺脫對啓動搜索面板的,我已經使出了雜牌:

 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

首先,感謝您的回覆。我看了一下源代碼並解決了1)問題。我覺得你有點過度了。我的解決方案是:mapPanel.getOverlayPanel()。setVisible(!mapPanel.getOverlayPanel()。isVisible()); //關閉覆蓋信息框\t mapPanel.getControlPanel()。setVisible(!mapPanel.getControlPanel()。isVisible()); //禁用覆蓋控制框 – ffleandro

+0

好的,所以1)解決了(在原始帖子上編輯解決方案)。 2)和3)問題如何?在源代碼中,我不認爲我看到了這些功能的實現。我正在考慮自己實施它們,但是我不明白我能夠完全做到這一點。例如,如果我有地圖某個區域的靜態圖像,我可以在其上繪製一條路線。但是,如果用戶跨度或縮放,我將不得不將我的繪圖調整到新的可見區域。我怎樣才能做到這一點? – ffleandro

+0

關於您的第一條評論:但我的解決方案爲您提供了可能有用的JMenuBar。至於2)和3),我認爲你將不得不做一些暴力編碼來實現這個功能。 –