在Java中按下按钮进行轮询

时间:2010-04-12 19:54:24

标签: java worldwind

我有一个基于Java SDK的WorldWind应用程序构建。它有一个很好的事件处理程序,用于检测您何时单击对象,但我遇到了障碍。虽然我可以单击并选择单个对象,但我无法确定用户是否在单击时按下控制键(如果他们想要选择多个对象)。我可以为鼠标和键盘实现事件处理程序,但我不能为我的生活弄清楚如何将两者结合在一起。如何让我的鼠标监听器轮询系统以获取当前按下的键列表?

2 个答案:

答案 0 :(得分:5)

您可以调用getModifiers()并按位比较以查看控件键(或者在事件期间是否按下了shift键。

public void mouseClicked( MouseEvent e ) {
  if( ( e.getModifiers() & ActionEvent.CTRL_MASK ) > 0 ) {
     // Control key depressed
  } 
}

答案 1 :(得分:1)

对于MouseEvent,您只需调用getModifiers()即可获得按下的修饰键(shift / control / alt等)键。

对于一般情况,使用变量将它们绑在一起?

你的keyhandler在注册一个按键时设置/清除变量,你的mouselistener会检查该变量。

如果您需要对这些进行更多的处理,只需创建一个密钥监听器和mouselistener访问的实例。

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(..);