gpt4 book ai didi

java - JMapViewer 禁用缩放

转载 作者:行者123 更新时间:2023-11-30 04:00:53 29 4
gpt4 key购买 nike

有没有办法防止 map 从某个缩放级别向外缩放?我尝试取消鼠标滚轮滚动事件(以防缩小),并隐藏放大/缩小控件。

map.addMouseWheelListener(new MouseWheelListener() {
@Override
public void mouseWheelMoved(MouseWheelEvent arg0) {
int newZoom = map.getZoom();
if (lastZoom < newZoom) {
zoomIn = true;
} else {
arg0.consume();
zoomIn = false;
}

只是为了确保:我想允许缩放,但仅限于特定的缩放级别。

谢谢

最佳答案

您可以扩展JMapViewer来重写setZoom()方法。例如:

import java.awt.Point;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import org.openstreetmap.gui.jmapviewer.JMapViewer;

public class TestMapZoom {

static class CustomMap extends JMapViewer {
private int maxZoomLevel;

public CustomMap() {
this.maxZoomLevel = 7;
}

public int getMaxZoomLevel() {
return maxZoomLevel;
}

public void setMaxZoomLevel(int maxZoom) {
this.maxZoomLevel = maxZoom;
}

@Override
public void setZoom(int zoom, Point mapPoint) {
if (zoom < getMaxZoomLevel())
super.setZoom(zoom, mapPoint);
}
}

private static void createAndShowUI() {
JFrame frame = new JFrame("Demo");
CustomMap viewer = new CustomMap();

frame.add(viewer);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationByPlatform(true);
frame.pack();
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}

编辑:没有 JMapViewer 扩展的版本

另一种不需要扩展JMapViewer、稍微简洁的方法可能是替换 map 使用的 Controller 。默认 JMapViewer 构造函数安装 DefaultMapController,此示例使用另一个构造函数和 Controller 的扩展版本:

import java.awt.event.MouseWheelEvent;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

import org.openstreetmap.gui.jmapviewer.DefaultMapController;
import org.openstreetmap.gui.jmapviewer.JMapViewer;
import org.openstreetmap.gui.jmapviewer.MemoryTileCache;

public class TestMapZoom2 {

static class CustomMapController extends DefaultMapController {
private int maxZoomLevel;

public CustomMapController(JMapViewer map) {
super(map);
this.maxZoomLevel = 7;
}

public int getMaxZoomLevel() {
return maxZoomLevel;
}

public void setMaxZoomLevel(int maxZoom) {
this.maxZoomLevel = maxZoom;
}

@Override
public void mouseWheelMoved(MouseWheelEvent e) {
if (e.getWheelRotation() < 0 && map.getZoom() >= getMaxZoomLevel())
return;
super.mouseWheelMoved(e);
}
}

private static void createAndShowUI() {
JFrame frame = new JFrame("Demo");
JMapViewer viewer = new JMapViewer(new MemoryTileCache(), 8);
new CustomMapController(viewer);

frame.add(viewer);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationByPlatform(true);
frame.pack();
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}

关于java - JMapViewer 禁用缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22002712/

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