gpt4 book ai didi

java - NetBeans 中的 JMapViewer : adding only map to a GUI JPanel

转载 作者:行者123 更新时间:2023-11-29 08:42:41 25 4
gpt4 key购买 nike

我正在尝试学习 JMapViewer,并将 map 嵌入到 JPanel 中,它是 CardLayout 的一部分。此时,我只想显示没有缩放、鼠标 Action 监听器等的 map 。因此,我在 NetBeans 中使用 CardLayout 和一些 JPanel 创建了一个 GUI 框架秒。在其中一个面板中,我添加了另一个面板, map 应该位于该面板中。然后我添加了 JMapViewer.jarJMapViewer_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 代码,如果我只是将它复制并粘贴到一个新项目中,它就可以工作。但我想从构建一个简单的 map 并将其添加到我的面板开始修改它。我错过了什么?

谢谢!

最佳答案

如果没有完整的示例,则不清楚您的程序哪里出错了。常见问题包括:

  • 将 map 添加到意外容器。

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

一般来说,通过按照建议限制 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 代替并尝试将 map 添加到 CENTER 和其他组件周边地区。

London Paris

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);
}
}

关于java - NetBeans 中的 JMapViewer : adding only map to a GUI JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38927368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com