NetBeans 中的 JMapViewer:仅将地图添加到 GUI JPanel
JMapViewer in NetBeans: adding only map to a GUI JPanel
我正在尝试学习 JMapViewer
,并在 JPanel
中嵌入了一张地图,它是 CardLayout
的一部分。此时,我只想显示没有缩放、鼠标动作侦听器等的地图。因此,我在 NetBeans 中创建了一个带有 CardLayout
和多个 JPanel
的 GUI 框架。在其中一个面板中,我添加了另一个面板,地图应该位于该面板中。然后我添加了 JMapViewer.jar
和 JMapViewer_src.jar
。然后我添加了以下简单代码:
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
代码,如果我只是将它复制并粘贴到一个新项目中,它就可以工作。但我想从构建一个简单的地图并将其添加到我的面板开始修改它。我错过了什么?
谢谢!
没有完整的示例,不清楚您的程序哪里出错了。常见问题包括:
正在将地图添加到意外的容器中。
在 调用 pack()
之后添加地图 ,而不重新验证容器。
通常,通过按照建议 here 限制 GUI 编辑器的范围来避免此类问题。在下面的示例中,CardPanel
的实例被添加到具有 CardLayout
.
的 JPanel
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
和周围区域的其他组件。
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
* @see
* @see
*/
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);
}
}
我正在尝试学习 JMapViewer
,并在 JPanel
中嵌入了一张地图,它是 CardLayout
的一部分。此时,我只想显示没有缩放、鼠标动作侦听器等的地图。因此,我在 NetBeans 中创建了一个带有 CardLayout
和多个 JPanel
的 GUI 框架。在其中一个面板中,我添加了另一个面板,地图应该位于该面板中。然后我添加了 JMapViewer.jar
和 JMapViewer_src.jar
。然后我添加了以下简单代码:
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
代码,如果我只是将它复制并粘贴到一个新项目中,它就可以工作。但我想从构建一个简单的地图并将其添加到我的面板开始修改它。我错过了什么?
谢谢!
没有完整的示例,不清楚您的程序哪里出错了。常见问题包括:
正在将地图添加到意外的容器中。
在 调用
pack()
之后添加地图 ,而不重新验证容器。
通常,通过按照建议 here 限制 GUI 编辑器的范围来避免此类问题。在下面的示例中,CardPanel
的实例被添加到具有 CardLayout
.
JPanel
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
和周围区域的其他组件。
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
* @see
* @see
*/
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);
}
}