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());
}
});
}
감사합니다.
쓰레기통. 고마워요! 이제 작동합니다. 두 번째 코멘트에 관해서, 나는 약간 혼란스러워했다. 나는 당신이 제안한대로''extends JMapViewer ''대신'DefaultMapController'를 확장하려고했습니다. 결과적으로'super()','setLayout','add()'등을 찾을 수 없으므로 코드가 깨지게됩니다.이 메소드가 없으면'new DefaultMapController (map)'메소드에서 map을 찾을 수 없습니다. 고맙습니다! –
쓰레기통. 질문 하나 더 드릴까요? 'tileLoadingFinished()'를 구현하기 위해, 클래스를 Panel 대신 JMapViewer로 확장해야했습니다. 결과적으로 이제지도에서 ** 두 개의 ** 확대/축소 컨트롤을 볼 수 있습니다. 하나는 다른 하나 뒤에 있습니다. 두 번째 줌 컨트롤러가 다음과 같이 추가 된 것처럼 보입니다 :'add (treeMap, BorderLayout.CENTER)'. 그러나이 행을 삭제하면 내 맞춤 마커가 더 이상 보이지 않습니다. 'tileLoadingFinished()'를 유지하는 두 번째 줌 컨트롤을 어떻게 제거 할 수 있는지 알고 계십니까? 고마워요! –
'JMapViewerTree'가'TileLoaderListener'를 구현하고'getViewer()'가 반환 한'JMapViewer'에서'setDisplayToFitMapMarkers()'를 호출 할 수있는 것처럼 보입니다. – trashgod