2017-05-21 40 views
0

JScrollPane 클래스의 하위 클래스 인 편집기 클래스가있는 netbeans에서 데스크톱 응용 프로그램을 개발 중입니다. (JScrollPane에는 두 개의 JScrollBars 가로 : & 세로입니다.) 마우스 휠을 사용하여 세로로 (수식어 없음) 스크롤 할 수 있고 가로로 (수식 수정자를 사용하여) 스크롤 할 수있는 등 모두 예상대로 작동합니다. 또 다른 수퍼 클래스 (내 클래스와 JScrollPane 클래스 사이)는 줌 기능을 구현합니다 (메뉴 명령을 통해 줌 (눈금) 요소를 설정하여 스크롤링 포함). alt (option) 키가 눌려지면 (isAltDown()이 참일 때) 마우스 휠을 사용하여 확대/축소 할 수 있고 그렇지 않으면 기본 스크롤 (H & V) 동작으로 대체 할 수 있습니다. 여기 내 클래스 설정 코드의 일부 :자바 - 마우스 휠로 스크롤 및 확대/축소 하시겠습니까?

  JScrollPane scrollPane = getPanelScrollPane(); 
      JScrollBar hsb = scrollPane.getHorizontalScrollBar(); 
      JScrollBar vsb = scrollPane.getVerticalScrollBar(); 

      MouseWheelListener mwl = new MouseWheelListener() { 
       @Override 
       public void mouseWheelMoved(MouseWheelEvent e) { 
        if (e.isAltDown()) { 
         double oldZoom = getZoom(); 
         double amount = Math.pow(1.1, e.getScrollAmount()); 
         if (e.getWheelRotation() > 0) { 
          //zoom in (amount) 
          setZoom(oldZoom * amount); 
         } else { 
          //zoom out (amount) 
          setZoom(oldZoom/amount); 
         } 
        } else { 
         // pass the event on to the scroll pane 
         getParent().dispatchEvent(e); 
        } 
       } 
      }; 

      // add mouse-wheel support 
      hsb.addMouseWheelListener(mwl); 
      vsb.addMouseWheelListener(mwl); 

이 설정 코드를 호출하기 되나 (커서가 내보기 위에있을 때) 나는 마우스 휠을 움직일 때 호출되지 않습니다되어 mouseWheelMoved 방법; 보기는 정상적으로 계속 스크롤됩니다 (H & V).

또한 추가 시도했다 "implements MouseWheelListener"내 클래스에 mouseWheelMoved 방법 :

아직도 행운
@Override 
public void mouseWheelMoved(MouseWheelEvent e) { 
    // (same as mouseWheelMoved above) 
} 

... 나는 무엇을 놓치고? (편집 : 휠 이벤트 전파에 관한 보너스 질문 : 대답 : < How to implement MouseWheelListener for JPanel without breaking its default implementation?>).

답변

0

그것을 알아 냈 ... 설정 코드는 다음과 같아야합니다

// add mouse-wheel support 
    JScrollPane scrollPane = getPanelScrollPane(); 
    scrollPane.addMouseWheelListener(this); 

그리고 내 클래스에이 mouseWheelMoved 방법을 implements MouseWheelListener를 추가

@Override 
    public void mouseWheelMoved(MouseWheelEvent e) { 
     if (e.isAltDown()) { 
      double oldZoom = getZoom(); 
      double amount = Math.pow(1.1, e.getScrollAmount()); 
      if (e.getWheelRotation() > 0) { 
       //zoom in (amount) 
       setZoom(oldZoom * amount); 
      } else { 
       //zoom out (amount) 
       setZoom(oldZoom/amount); 
      } 
     } else { 
      // if alt isn't down then propagate event to scrollPane 
      JScrollPane scrollPane = getPanelScrollPane(); 
      scrollPane.getParent().dispatchEvent(e); 
     } 
    } 

지금 모든 작품! alt (옵션)을 사용하여 마우스 휠을 확대/축소하고 패널 스크롤을 아래로 내리지 마십시오.