2011-04-01 13 views
6

私は、Java Swingを使ったGUIアプリケーションでは、いくつかのMouseEventを処理していますでクリックから発生しました。ずれ検出調整剤は、スイング

今私は 左または右クリックが発生した場合にのみ決定するために、のmousePressedメソッド内でマウスイベントを分析することだったので。

私のコードをした

public void mousePressed(MouseEvent me) { 
    if (me.getModifiers == InputEvent.BUTTON1_DOWN_MASK){ 
    //left click 
    }else if (me.getModifiers == InputEvent.BUTTON3_DOWN_MASK){ 
    //right click 
    } 

今、私のアプリケーションは、より複雑になってきていると私は、マウスを左クリックしている間にシフトボタンが押されたかどうかを確認することも必要です。 私はこのような何かをしたいと思います:

public void mousePressed(MouseEvent me) { 
    if (me.getModifiers == InputEvent.BUTTON1_DOWN_MASK && me.isShiftDown()){ 
    //left click 
    } 

は今、これは動作しません。特に、Shiftキーを押しながら左ボタンをクリックすると、isShiftDownがtrueを返すようになりましたが、今度は修飾子も変更されてBUTTON1_DOWN_MASKとの比較が失敗するようです。

me.getModifiers == InputEvent.BUTTON1_DOWN_MASK //failed..modifiers are changed 

私は間違っていますか?コードを修正するにはどうすればよいですか?

答えて

10

方法はgetModifier_s_(と呼ばれることに留意されたい)、「S」と、それはビット単位「または」を使用して組み合わせ、複数の修飾子を、返すことができるからです。これは、「==」を使用することは技術的には決して正しいです:あなたはこのように、「&」ビット単位で使用する必要があります。

if ((me.getModifiers() & InputEvent.BUTTON1_DOWN_MASK) != 0) ... 

は、あなたが他の人が存在しても、その1つの修飾に応えるます。

+0

を使用する必要があります。とにかくあなたのコード(me.getModifiers()&InputEvent.BUTTON1_DOWN_MASK)はブール値を返しません – Heisenbug

+0

申し訳ありません、あなたは正しいです。今修正されました。 –

+0

申し訳ありません。私は少し混乱しています。逆の方法で正確に動作するようです:(me.getModifiers()&InputEvent.BUTTON1_DOWN_MASK)== 0。とにかく...あなたはポイントを得ました。ありがとう – Heisenbug

0

あなたは正しいです

if ((me.getModifiersEx() & InputEvent.BUTTON1_DOWN_MASK) != 0) 

または

if ((me.getModifiers() & InputEvent.BUTTON1_MASK) != 0)