2013-05-07 7 views

答えて

8

BUTTON1_MASKイベントを示すマスクは、概念的に類似しているが、がその一定の拡張バージョンである、ボタン1 BUTTON1_DOWN_MASKから来ています。

は定数のようなセットを返す2つの方法があります。InputEvent#getModifiers()InputEvent#getModifiersEx()、彼らは修飾子定数を返します、またははそれぞれ、修飾子定数を拡張しました。

From the docs (bold is mine)

InputEvent.getModifiersによって返されたボタンマスクは、()状態が変更のみ ボタンではなく、すべてのボタン の現在状態...すべての状態を取得するにはを反映していますボタンと修飾子 のキーは、InputEvent.getModifiersEx()を使用します。

and also (bold is mine):イベントは

を発生した後、このようなALT、 CTRL、META、およびマウスボタンなど、すべてのモーダルキーの状態だけを表す

拡張修飾子例えば、ユーザがボタン1に続いてボタン2を押した後、 が同じ順序でそれらを解放すると、次の一連のイベント が生成されます。

MOUSE_PRESSED: BUTTON1_DOWN_MASK 
MOUSE_PRESSED: BUTTON1_DOWN_MASK | BUTTON2_DOWN_MASK 
MOUSE_RELEASED: BUTTON2_DOWN_MASK 
MOUSE_CLICKED: BUTTON2_DOWN_MASK 
MOUSE_RELEASED: 
MOUSE_CLICKED: 

あなたが望むすべてが、これらのいずれかが動作するはずです、クリック(通常、左)ボタン1を検出することである場合:

if ((e.getModifiers() & MouseEvent.BUTTON1_MASK) != 0) { 
    System.out.println("BUTTON1_MASK"); 
} 

if ((e.getModifiersEx() & MouseEvent.BUTTON1_DOWN_MASK) != 0) { 
    System.out.println("BUTTON1_DOWN_MASK"); 
} 

また、あなたがチェックアウトすることができますこのオープンソース版InputEventwhich has some more useful comments, and shows what's happening inside

+0

これは長い時間がかかりましたが、誰もがこれを読んでいます。なぜあなたのコードには単一のアンパサンドがあるのですか? e.getModifiers()&MouseEvent.BUTTON1_MASK。これは、設定された交差点を表していますか? – user2316667

+1

@ user2316667、これは、「getModifiers()」および「getModifiersEx()」(http://docs.oracle.com/javase/7/docs/api/java/awt/event/InputEvent.html#getModifiersEx%28 %29)メソッドは、フラグの*組み合わせ*を保持できる整数を返します。整数の任意の**特定のフラグをテストするために、 '&'演算子を使用して、その特定のビットが0でないかどうかを確認します( '!= 0'の出現箇所です)。 Button1ビットがあなたが興味を持っているなら、 'e.getModifiers()&BUTTON1_MASK!= 0'のようなマスクでそれをチェックします。これはブール値の&&演算子ではありません。これは別のものです。 – Nate

+0

[このチュートリアルの詳細はこちら](http://www.tutorialspot.com/java/java_bitwise_operators_examples.htm)を参照してください。 – Nate

3

ドキュメントの状態として、BUTTON1_MASKBUTTON1_DOWN_MASKは修飾子定数です。つまり、MouseEvent#getModifiersと組み合わせて使用​​します。それらは例えば

@Override 
public void mousePressed(MouseEvent me) { 
if ((me.getModifiers() & InputEvent.BUTTON1_MASK) == InputEvent.BUTTON1_MASK) { 
     System.out.println("Left button pressed."); 
    } 
} 

BUTTON1_DOWN_MASKため、拡張むしろマスク値として使用されていないBUTTON1_MASKが単に押されたボタンを決定するのに役立つ一方、マウスボタンの状態を検出するために使用されます。

+0

この回答は簡潔です。 – smwikipedia

関連する問題