目前我正在一個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