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?>).