1

JavaSDKに基づいてWorldWindアプリケーションをビルドしています。オブジェクトをクリックしたときにそれを検出するための優れたイベントハンドラーがありますが、私は問題に遭遇しました。クリックして個々のオブジェクトを選択することはできますが、ユーザーがクリックしているときにCtrlキーを押しているかどうかを判断できません(複数のオブジェクトを選択する場合)。マウスとキーボードの両方にイベントハンドラーを実装することはできますが、この2つを結び付ける方法を一生理解することはできません。マウスリスナーに、現在押されているキーのリストについてシステムをポーリングさせるにはどうすればよいですか?

4

2 に答える 2

5

getModifiers()を呼び出し、ビット単位で比較して、イベント中にコントロールキー(またはShiftキーが押されたかどうか)を確認できます。

public void mouseClicked( MouseEvent e ) {
  if( ( e.getModifiers() & ActionEvent.CTRL_MASK ) > 0 ) {
     // Control key depressed
  } 
}
于 2010-04-12T20:01:21.947 に答える
1

MouseEventの場合、 getModifiers()を呼び出すだけで、 押された修飾キー(Shift / Control / Altなど)キーのマスクを取得できます。

一般的なケースでは、変数を使用してそれらを結び付けますか?

キーハンドラーは、キー押下を登録するときに変数を設定/クリアし、マウスリスナーはその変数をチェックします。

これらをもう少しデコピーする必要がある場合は、キーリスナーとマウスリスナーの両方がアクセスするインスタンスを作成するだけです。

public class Pressedkeys {
  private boolean shiftPressed = false;
  private boolean controlPressed = false;
  public void setShiftPressed(boolean pressed) {
    this.shiftPressed = pressed;
  }
  public void setControlPressed (boolean pressed) {
    this.shiftPressed = pressed;
  }
 public boolean isControlPresed() {
   return controlPressed ;
  }
  ...
}

Pressedkeys k = new PressedKeys();
MyMouseThing t = new MyMouseThing(k);
//your mousething mouse handler would check k.isControlPressed();
MyKeyboardThing t = new MyKeyboardThing (k);
//your KeyBoardThing - which has a key handler would set k.setControlPressed(..);
于 2010-04-12T20:03:27.003 に答える