2012-12-02 2 views
2

스윙 JFrame을 작업하고 있으며 프로그램의 기능 중 하나는 마우스의 스크롤 휠을 사용하여 창에서 이미지 크기를 조정하는 것과 관련이 있습니다. JFrame 자체에 대한 MouseWheelListener로 추가 된 MouseAdapter를 구현했습니다. 자바 - MouseWheelEvent 두 번 트리거

/** 
* Handles scroll wheel activity. 
*/ 
private MouseAdapter wheelListener = new MouseAdapter() { 
    @Override 
    public void mouseWheelMoved(MouseWheelEvent e) { 
     int notches = e.getWheelRotation(); 
     System.out.println(notches); 
     while (notches > 0) { 
      controller.zoomIn(); 
      notches--; 
     } 
     while (notches < 0) { 
      controller.zoomOut(); 
      notches++; 
     } 
    } 
}; 

그리고 JFrame의 생성자에서

:

public MainFrame() { 
    ... 
    addMouseWheelListener(wheelListener); 
    ... 
} 

난 데 문제는 이벤트가 두 번 트리거이다 각각의 스크롤 휠을 압연 할 때 "클릭". 비슷한 문제가있는 사람을 찾을 수 없었습니다.

mouseWheelMoved 메서드에 if(e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL) { ... } 메서드를 넣어 보았습니다. 두 가지 유형의 이벤트가 발생했는지 확인하려고했지만 모두 WHEEL_UNIT_SCROLL's입니다.

또한 이벤트 소스를 인쇄하여 다른 창/창에서 왔는지를 다시 확인했지만 두 가지 모두 내 메인 JFrame 창에서 보았습니다.

누군가 내가 왜 두 가지 이벤트를 얻는 지 알 수 있습니까?

편집 : 추가 휠 리스너 섹션에 잘못된 라인을 입력하십시오. 죄송합니다. 편집 : 일부 테스트 후 .hashCode()을 사용하여 MouseWheelEvents이라는 고유 한 두 가지가 있는지 확인할 수있었습니다. MouseAdapter가 어떻게 든 두 번 추가되고있는 것 같습니다. MainFrame의 생성자에 추가하고 한 번만 발생한다는 것을 확인했습니다.

+4

[sscce] (http://sscce.org)에서 코드를 시험해 보았지만 정상적으로 작동했습니다. 청취자를 두 번 이상 추가 하시겠습니까? 문제를 설명하는 [sscce] (http://sscce.org)를 작성하고 게시 해보십시오. –

+2

또한 질문이 WindowListeners와 아무 관련이 없을 때 왜 우리에게'addWindowListener (...)'비트를 보여줄 수 있습니까? –

+0

' "나는 MouseAdapter가 어떻게 든 두 번 추가되고있는 것 같아." 당신도 문제가되는 코드를 보여주지 않을 것입니다. –

답변

0

e.consume()을 추가하면이 문제를 해결할 수 있습니다.

private MouseAdapter wheelListener = new MouseAdapter() { 
    @Override 
    public void mouseWheelMoved(MouseWheelEvent e) { 
     e.consume() // avoid the event to be triggred twice 
     int notches = e.getWheelRotation(); 
     System.out.println(notches); 
     while (notches > 0) { 
      controller.zoomIn(); 
      notches--; 
     } 
     while (notches < 0) { 
      controller.zoomOut(); 
      notches++; 
     } 
    } 
}; 
+0

이것은 나를 위해 완벽하게 작동했습니다! 고맙습니다. –

관련 문제