Опрос для нажатых кнопок в Java - PullRequest
1 голос
/ 12 апреля 2010

У меня есть сборка приложения WorldWind на основе Java SDK. Он имеет отличный обработчик событий для определения, когда вы нажимаете на объекты, но я столкнулся с загадкой. Хотя я могу щелкать и выбирать отдельные объекты, я не могу определить, нажимает ли пользователь управляющую клавишу, когда он щелкает (если он хочет выбрать несколько объектов). Я могу реализовать обработчики событий как для мыши, так и для клавиатуры, но пока не могу понять, как связать их вместе. Как я мог заставить моего слушателя мыши опрашивать систему на предмет списка в данный момент нажатых клавиш?

Ответы [ 2 ]

5 голосов
/ 13 апреля 2010

Вы можете вызвать getModifiers () и побитовое сравнение, чтобы увидеть, была ли нажата управляющая клавиша (или клавиша Shift во время события.

public void mouseClicked( MouseEvent e ) {
  if( ( e.getModifiers() & ActionEvent.CTRL_MASK ) > 0 ) {
     // Control key depressed
  } 
}
1 голос
/ 13 апреля 2010

Для MouseEvent вы можете просто вызвать getModifiers () , чтобы получить маску клавиш-модификаторов (shift / control / alt и т. Д.), Которые нажимаются.

В общем случае использовать переменную, чтобы связать их вместе?

Ваш обработчик ключей устанавливает / очищает переменную, когда он регистрирует нажатие клавиши, ваш обработчик мыши проверяет эту переменную.

Если вам нужно еще больше разобраться с ними, просто создайте экземпляр, к которому обращаются и ваш ключевой слушатель, и 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(..);
...