2
我在JMapViewer
上有兩個自定義圖像作爲標記。我希望地圖設置適當的平移和縮放,以便兩個標記在地圖顯示中可見。我有一個按鈕可以做到。所以,發生的事情是地圖在加載時不會放大到這些標記;但是當我點擊按鈕時,它確實如此。有沒有辦法在加載時設置正確的平移和縮放?JMapViewer:當地圖剛剛加載時,平移和縮放未設置
public class PanelAcars extends javax.swing.JPanel implements JMapViewerEventListener
{
private final JMapViewerTree treeMap;
public PanelAcars()
{
super();
initComponents(); // GUI components
treeMap = new JMapViewerTree("Zones");
// Listen to the map viewer for user operations so components will
// receive events and update
map().addJMVListener(this);
setLayout(new BorderLayout());
pnlAcarsMapView = new JPanel(new BorderLayout());
JPanel panelTop = new JPanel();
JPanel panelBottom = new JPanel();
JPanel helpPanel = new JPanel();
add(pnlAcarsMapView, BorderLayout.NORTH);
add(helpPanel, BorderLayout.SOUTH);
pnlAcarsMapView.add(panelTop, BorderLayout.NORTH);
pnlAcarsMapView.add(panelBottom, BorderLayout.SOUTH);
/* THIS BUTTON WORKS!!! */
JButton button = new JButton("Zoom...");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
map().setDisplayToFitMapMarkers();
}
});
final JCheckBox showZoomControls = new JCheckBox("Show zoom controls");
showZoomControls.setSelected(map().getZoomControlsVisible());
showZoomControls.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
map().setZoomContolsVisible(showZoomControls.isSelected());
}
});
panelBottom.add(showZoomControls);
final JCheckBox scrollWrapEnabled = new JCheckBox("Scrollwrap enabled");
scrollWrapEnabled.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
map().setScrollWrapEnabled(scrollWrapEnabled.isSelected());
}
});
panelBottom.add(scrollWrapEnabled);
panelBottom.add(button);
add(treeMap, BorderLayout.CENTER);
/* Add Airports to the map */
LayerGroup mapGroupAirports = new LayerGroup("MapAirports");
Layer mapLayerDep = mapGroupAirports.addLayer("MapDep");
Layer mapLayerDest = mapGroupAirports.addLayer("MapDest");
Layer mapLayerAlt = mapGroupAirports.addLayer("MapAlt");
/* Add Plane to the map */
Layer mapLayerPlane = new Layer("MapPlane");
/* Set coordinates */
Coordinate coordinatesPlane = new Coordinate(49.814284999, 98.642065999);
Coordinate coordinatesDep = new Coordinate(23.814284999, 45.642065999);
JMapViewerMarkerCustomImage markerPlane;
JMapViewerMarkerCustomImage markerDep;
Image imageMarkerPlane;
Image imageMarkerDep;
try
{
imageMarkerPlane = ImageIO.read(this.getClass().getResource("/images/image1.png"));
markerPlane = new JMapViewerMarkerCustomImage(coordinatesPlane,imageMarkerPlane);
map().addMapMarker(markerPlane);
imageMarkerDep = ImageIO.read(this.getClass().getResource("/images/image2.png"));
markerDep = new JMapViewerMarkerCustomImage(coordinatesDep,imageMarkerDep);
map().addMapMarker(markerDep);
// AND THIS IS NOT WORKING AT LOADING!!!
map().setDisplayToFitMapElements(true, true, true);
} catch (IOException ex) {
ex.printStackTrace();
}
map().addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON1) {
map().getAttribution().handleAttribution(e.getPoint(), true);
}
}
});
map().addMouseMotionListener(new MouseAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
Point p = e.getPoint();
boolean cursorHand = map().getAttribution().handleAttributionCursor(p);
if (cursorHand) {
map().setCursor(new Cursor(Cursor.HAND_CURSOR));
} else {
map().setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
//if (showToolTip.isSelected()) map().setToolTipText(map().getPosition(p).toString());
}
});
}
非常感謝!
垃圾。非常感謝!它現在有效。關於你的第二個評論,我有點困惑。正如你所建議的,我試圖擴展DefaultMapController而不是擴展JMapViewer。因此,代碼被破壞,因爲現在找不到'super()','setLayout','add()'等等。沒有它,在'new DefaultMapController(map)'方法中,找不到map。謝謝! –
垃圾。我可以再問一個問題嗎?要實現'tileLoadingFinished()',我必須將類擴展爲JMapViewer而不是Panel。因此,現在我在地圖上看到**兩個**縮放控件,一個在另一個後面。看起來第二個縮放控制器添加了這個:'add(treeMap,BorderLayout.CENTER)'。但是,如果我刪除此行,我的自定義標記不再可見。你知道我可以如何移除保留'tileLoadingFinished()'的第二個縮放控件嗎?非常感謝! –
看起來你可以讓'JMapViewerTree'實現'TileLoaderListener'並且在'getViewer()'返回的'JMapViewer'上調用'setDisplayToFitMapMarkers()'。 – trashgod