Обнаружение мыши, покидающей окно с обработкой


У меня есть программа, которую я пишу в процессе обработки, и мне нужно быть в состоянии обнаружить, когда мышь покинула окно/холст. Однако, насколько я могу судить, процессинг не имеет ничего похожего на событие mouseOut. Есть ли способ сделать это с помощью обратного вызова или события или чего-то подобного?

2 2

2 ответа:

Используя знание положения окна плюс его границы, вы также можете вычислить, находится ли указатель внутри кадра или нет. Тогда вы можете вызвать свою функцию.

import java.awt.Point;
import java.awt.MouseInfo;

java.awt.Insets insets;
Point mouse, win;

void setup() {
  size(400, 400);
  frame.pack();
  smooth();
}

void draw() {
  setFrame();
  if(insideFrame()) {
    background(95);
  } 
  else {
   background(0); 
  }  
}

//set position of frame
void setFrame() 
{  
  mouse = MouseInfo.getPointerInfo().getLocation();
  win = frame.getLocation();

  if(!frame.isUndecorated()){
    //add borders of window
    insets = frame.getInsets();
    win.x += insets.left;
    win.y += insets.top;
  }
}

boolean insideFrame() {
  boolean in = false;
  if(mouse.x-win.x >= 0 && width >= mouse.x-win.x)
    if(mouse.y-win.y >= 0 && height >= mouse.y-win.y)
      in = true;

  return in;
}

Взгляните на класс Java MouseAdapter. Пример кода:

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

void setup(){
  frame.addMouseListener(new MouseAdapter(){
    public void mouseEntered(MouseEvent e){
      print("notify");
    }
  });
}
void draw(){}