目前我正在开发一个摇摆应用程序,由一个带有拆分面板的框架组成。在左侧面板中,我有一个 jtree,列出了世界上所有的国家,在右侧面板中,我有一个 OpenStreetMap,在启动时显示了一张地图(有效)。jtree 的节点链接到 valueChanged(..) 事件处理程序:
/** Required by TreeSelectionListener interface. */
public void valueChanged(TreeSelectionEvent e) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
mapPanel = drawOpenStreetMap(45, 65, 12);
mapPanel.repaint();
repaint();
splitPane.repaint();
repaint();
updateUI();
}
MapPanel drawOpenStreetMap(double lon, double lat, int zoom) {
mapPanel = new MapPanel(); // just a JPanel extension, add to any swing/awt container
mapPanel.setZoom(zoom); // set some zoom level (1-18 are valid)
Point position = mapPanel.computePosition(new Point2D.Double(lon, lat));
mapPanel.setCenterPosition(position); // sets to the computed position
mapPanel.repaint(); // if already visible trigger a repaint here
return mapPanel;
}
valueChanged 方法在单击 jtree 节点时被调用,而 drawOpenStreetMap 确实被调用,我希望地图能够更新并显示新位置。但没有任何改变。启动时创建的地图保持可见不变。valueChange 方法的代码显示了许多 repaint() 调用等。我尝试过,但无济于事。
这是指向MapPanel源代码的指针。
如果有人能告诉我如何更新地图,那就太好了。提前致谢!
后记:我指错了MapPanel;一定是这个。