Java определяет, какая кнопка мыши выпущена в OSX нажатием Ctrl - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь отслеживать, нажимаются ли BUTTON1 BUTTON2 и BUTTON3.

Проблема в том, что в OSX ctrl + click отображается как щелчок правой кнопкой мыши.Поэтому, если у меня есть следующее (с использованием обработки):

boolean mouse_left_pressed;
boolean mouse_right_pressed;

void setup() {
  size(200, 100);  
}

void draw() {
  background(0);
  fill(255);
  text("left: "+mouse_left_pressed, 50, 50);
  text("right: "+mouse_right_pressed, 50, 75);
}


public void mousePressed(MouseEvent e) {
  if (e.getButton() == LEFT) mouse_left_pressed = true;
  if (e.getButton() == RIGHT) mouse_right_pressed = true;
}

public void mouseReleased(MouseEvent e) {
  if (e.getButton() == LEFT) mouse_left_pressed = false;
  if (e.getButton() == RIGHT) mouse_right_pressed = false;
}

Если я сделаю следующие шаги:

  • щелкните левой кнопкой мыши и удерживайте
  • нажмитенажмите и удерживайте
  • отпустите левую мышь

Тогда, хотя у меня больше нет нажатой мыши, состояние mouse_left_pressed все еще имеет значение true.Есть ли способ получить актуальную кнопку мыши, которая выпущена?

1 Ответ

0 голосов
/ 21 октября 2018

Это потому, что Ctrl + левый клик в OSX эквивалентен правому клику.Это немного взломать, но вы можете проверить модификаторы следующим образом:

boolean mouse_left_pressed;
boolean mouse_right_pressed;

void setup() {
  size(200, 100);  
}

void draw() {
  background(0);
  fill(255);
  text("left: "+mouse_left_pressed, 50, 50);
  text("right: "+mouse_right_pressed, 50, 75);
}


public void mousePressed(MouseEvent e) {
  if (e.getButton() == LEFT) mouse_left_pressed = true;
  if (e.getButton() == RIGHT) {
    if (!e.isControlDown()) {
      mouse_right_pressed = true;
    }
    else {
      mouse_left_pressed = true;
    }
  }
}

public void mouseReleased(MouseEvent e) {
  println(e);
  if (e.getButton() == LEFT) mouse_left_pressed = false;
  if (e.getButton() == RIGHT) {
      if (!e.isControlDown()) {
        mouse_right_pressed = false;
      }
      else {
        mouse_left_pressed = false;
      }
  }
}
...