gpt4 book ai didi

java - JMapViewer: map 刚加载时未设置平移和缩放

转载 作者:行者123 更新时间:2023-11-30 08:34:14 26 4
gpt4 key购买 nike

我在 JMapViewer 上有两个自定义图像作为标记。我希望 map 设置适当的平移和缩放,以便两个标记在 map 显示上可见。我有一个按钮可以做到这一点。所以,发生的事情是 map 在加载时没有缩放到这些标记;但是当我点击按钮时,它确实如此。有没有办法在加载时设置适当的平移和缩放?

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());
}
});

}

非常感谢!

最佳答案

在 map 的 tileLoadingFinished() 实现中调用 setDisplayToFitMapMarkers()。使用 boolean 变量 loaded,默认情况下为 false,下面的实现在第一个图 block 加载后调用该方法;父实现将 repaint() 任何后续的图 block 。

private boolean loaded;

private class MyViewer extends JMapViewer {

@Override
public void tileLoadingFinished(Tile tile, boolean success) {
super.tileLoadingFinished(tile, success);
if (!loaded & success) {
loaded = true;
setDisplayToFitMapMarkers();
}
}

}

要使用 JMapViewerTree 获得类似的结果,您需要更改在 JMapViewerTree 构造函数中实例化的 map。以下更改适用于 Demo.java:


private boolean loaded;

public JMapViewerTree(String name, boolean treeVisible) {

map = new JMapViewer() {
@Override
public void tileLoadingFinished(Tile tile, boolean success) {
super.tileLoadingFinished(tile, success);
if (!loaded & success) {
loaded = true;
setDisplayToFitMapMarkers();
}
}
};

}

顺便说一句,按照建议 here,考虑扩展或替换 DefaultMapController,而不是 MouseAdapter .

关于java - JMapViewer: map 刚加载时未设置平移和缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38944277/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com