8

JavaSwingを使用して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
     }

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

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

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

4

2 に答える 2

12

このメソッドは、ビット単位の「または」を使用して結合された複数の修飾子を返すことができるため、「s」を付けてgetModifier_s_()と呼ばれることに注意してください。「==」を使用することは技術的には決して正しくありません。次のように、ビット単位の「&」を使用する必要があります。

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

そうすれば、他の修飾子が存在する場合でも、その1つの修飾子に応答します。

于 2011-04-01T19:13:59.990 に答える
1

あなたは使用する必要があります

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

また

if ((me.getModifiers() & InputEvent.BUTTON1_MASK) != 0)
于 2016-10-11T20:34:55.027 に答える