目前我正在一个swing应用程序,由一个框架与splitpanel组成。在左侧面板中,我有一个jtree,列出了世界上所有的国家,在右侧面板中我有一个OpenStreetMap,在启动时显示一张地图(哪个工作正常)。 的JTree的节点链接到的valueChanged(..)事件处理程序:摆动mappanel地图刷新
/** 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;它必须是this one。
随机重绘很少帮助:-)而且永远不会调用updateUI:它_not_意味着在应用程序代码(而不是,改变LAF时,它的内部使用)使用 – kleopatra 2012-07-25 08:15:59
@kleopatra - 可能,但我在java教程中首先阅读了这些内容,并且他们在应用程序代码中使用绘画。说实话,我从来没有明白,绘画业务正常:) – jhulst 2012-07-25 14:26:47
正在谈论这[链接](http://docs.oracle.com/javase/tutorial/uiswing/painting/step3.html) – jhulst 2012-07-25 14:33:04