2017-03-25 5 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を示すように。また、getPreferredSize()をオーバーライド考えます。

関連する問題