2016-08-12 79 views
1

我正在尝试学习JMapViewer,并且嵌入JPanel中的地图,它是CardLayout的一部分。此时,我只想显示没有缩放的地图,鼠标动作侦听器等。因此,我在NetBeans中使用CardLayoutJPanel s创建了一个GUI框架。在其中一个面板内,我添加了另一个面板应该放置的地图。然后我加了JMapViewer.jarJMapViewer_src.jar。然后,我添加了以下简单代码:NetBeans中的JMapViewer:仅向GUI添加地图JPanel

package viewController; 

import java.awt.BorderLayout; 
import javax.swing.JPanel; 
import org.openstreetmap.gui.jmapviewer.JMapViewer; 
import org.openstreetmap.gui.jmapviewer.events.JMVCommandEvent; 
import org.openstreetmap.gui.jmapviewer.interfaces.JMapViewerEventListener; 

public class PanelAcars extends javax.swing.JPanel implements JMapViewerEventListener 
{ 

    public PanelAcars() 
    { 
     super(); 

     setSize(400,400); 

     initComponents(); 

     final JMapViewer map = new JMapViewer(); 

     pnlAcarsMapView.add(map); 

    } 


    @Override 
    public void processCommand(JMVCommandEvent command) { 
     if (command.getCommand().equals(JMVCommandEvent.COMMAND.ZOOM) || 
       command.getCommand().equals(JMVCommandEvent.COMMAND.MOVE)) { 
      //updateZoomParameters(); 
     } 
    } 


    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">       

    private void initComponents() { 

     pnlAcarsMapView = new javax.swing.JPanel(); 

     ... 
    }       

    private javax.swing.JPanel pnlAcarsMapView; 

} 

面板为空。我有Demo.java的代码,如果我只是将它复制并粘贴到一个新项目中,它就可以工作。但我想修改它从建立一个简单的地图,并将其添加到我的面板。我错过了什么?

谢谢!

回答

4

如果没有一个完整的例子,您的程序出错的位置并不清楚。常见问题包括以下:

  • 添加地图到意外容器。

  • 添加地图调用pack(),而不重新验证容器。

通常,通过将GUI编辑器的范围限制为建议的here来避免出现此类问题。在下面的示例中,CardPanel的实例被添加到具有CardLayoutJPanel

cards.add(new CardPanel("London", new Coordinate(51.5072, -0.1275))); 
cards.add(new CardPanel("Paris", new Coordinate(48.8566, 2.3522))); 

每个这样的实例都有一个GridLayout,但你可以替代一个BorderLayout和实验与周围区域添加映射到CENTER等组成。

LondonParis

import java.awt.BorderLayout; 
import java.awt.CardLayout; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import javax.swing.AbstractAction; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import org.openstreetmap.gui.jmapviewer.Coordinate; 
import org.openstreetmap.gui.jmapviewer.JMapViewer; 

/** 
* @see https://stackoverflow.com/a/38934376/230513 
* @see https://stackoverflow.com/a/36392696/230513 
* @see https://stackoverflow.com/a/36243395/230513 
*/ 
public class CardPanel extends JPanel { 

    private static final JPanel cards = new JPanel(new CardLayout()); 
    private final String name; 

    public CardPanel(String name, Coordinate coordinate) { 
     super(new GridLayout()); 
     this.name = name; 
     JMapViewer map = new JMapViewer() { 

      @Override 
      public Dimension getPreferredSize() { 
       return new Dimension(320, 240); 
      } 
     }; 
     map.setDisplayPosition(coordinate, 12); 
     this.add(map); 
    } 

    @Override 
    public String toString() { 
     return name; 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       create(); 
      } 
     }); 
    } 

    private static void create() { 
     JFrame f = new JFrame(); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     cards.add(new CardPanel("London", new Coordinate(51.5072, -0.1275))); 
     cards.add(new CardPanel("Paris", new Coordinate(48.8566, 2.3522))); 
     JPanel control = new JPanel(); 
     control.add(new JButton(new AbstractAction("\u22b2Prev") { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       CardLayout cl = (CardLayout) cards.getLayout(); 
       cl.previous(cards); 
      } 
     })); 
     control.add(new JButton(new AbstractAction("Next\u22b3") { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       CardLayout cl = (CardLayout) cards.getLayout(); 
       cl.next(cards); 
      } 
     })); 
     f.add(cards, BorderLayout.CENTER); 
     f.add(control, BorderLayout.SOUTH); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 
} 
+1

太谢谢你了。很有帮助! –

相关问题