2017-03-25 1 views
0

지도 뷰를 오른쪽 단추에서 왼쪽으로 이동하려면 마우스 단추를 변경하려고합니다.JMapViewer : setMovementMouseButton() 메서드의 이상한 동작

은 마우스 왼쪽 버튼을 클릭 한 후 버튼을 변경하는 간단한 코드가

:

public class Map extends JMapViewer { 

    public Map()   { 
      new DefaultMapController(this){ 
        public void mousePressed(MouseEvent e) {     
          this.setMovementMouseButton(MouseEvent.BUTTON1); 
        } 
      }; 
    } 
} 

메인 클래스 :

public class JMapViewerDemo { 
    public static void main(String[] args) { 
      JFrame f = new JFrame(); 
      f.add(new Map()); 
      f.setSize(800, 600); 
      f.setVisible(true);   
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
} 

놀랍게도, 코드가 작동하지 않습니다이 (더 재 할당은 없었다 끝난). 왜? 그러나, 부모 클래스의 방법 다음과 같은 동작이 관찰되었다

public void mousePressed(MouseEvent e) {  
    super.mousePressed(e);  //Calling the parent-class method   
    this.setMovementMouseButton(MouseEvent.BUTTON1); 
} 

호출 한 후 :

  1. 을 마우스 왼쪽 버튼을 클릭합니다. 드래그 할 때 아무런 재 할당도 수행하지 않았습니다 (동일한 상황) .

  2. 왼쪽 마우스 버튼을 놓습니다.

  3. 마우스 왼쪽 버튼을 다시 클릭하십시오. 드래그 할 때 왼쪽 마우스 버튼에 패닝이 지정됩니다.

이 동작이 이상합니다. 어쩌면이 방법을 잘못 사용하고 있습니다 ...

해제 및 다시 클릭하지 않고 패닝 단추를 직접 변경하는 방법은 무엇입니까? 당신의 도움을 주셔서 감사합니다 ... 볼

답변

1

결과는 예상치 못한 아니지만, 약간의 직관 수 있습니다 : 귀하의 예는 mousePressed()의 구현에 DefaultMapController의 내부 상태를 변경합니다. 당신이 원하는대로 선호 버튼을 변경할 수 있도록하는 대신, 사용자 정의 컨트롤러에 대한 참조를 저장합니다 데스크톱 응용 프로그램에서

JMapViewer map = new JMapViewer(); 
    DefaultMapController dmc = new DefaultMapController(map){…}; 
    dmc.setMovementMouseButton(MouseEvent.BUTTON1); 

을, 당신은 사용자가 라디오 버튼을 사용하여 원하는 마우스 버튼을 선택할 수 있도록하고 선택한 값을 저장 할 수 사용자의 Preferences 중에서 here으로 표시됩니다. 또한 setSize()을 호출하는 대신 을 재정의하는 것이 좋습니다 (그림은 here).