2014-02-25 186 views
1

有没有一种方法可以防止地图从缩放级别缩小到外部? 我试着取消鼠标滚轮滚动事件(以防缩放),并隐藏放大/缩小控件。JMapViewer禁用缩放

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

只是为了确保:我想允许缩放,但直到特定缩放级别只。

感谢,

回答

1

可以扩展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(); 
      } 
     }); 
    } 
} 

EDIT版本,而不JMapViewer延伸

另一个,不需要的JMapViewer扩展可以替代由地图所使用的控制器的略微清洁器的方法。默认JMapViewer构造安装DefaultMapController,这个示例使用控制器的另一构造和扩展版:

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

你是男人!第一个解决方案对我来说就像一个魅力,谢谢!第二个不起作用,但我可以与第一个生活在一起。 –

+1

@OzRartao欢迎您! :) – tenorsax