2014-02-25 6 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

@ OzRadiano приветствую вас! :) – tenorsax

Смежные вопросы