Вы можете попробовать добавить WindowListener и переопределить событие windowDeactivation (), которое должно вызываться, когда фрейм больше не является «активным окном» в соответствии с операционной системой.
UPDATE:
Если вы добросовестно убедитесь, что ваши дочерние диалоговые окна и окна принадлежат вашему приложению (убедитесь, что вы передаете фрейм приложения в качестве владельца), то вы можете заставить свой WindowListener сделать что-то вроде этого:
public void windowDeactivated(WindowEvent e) {
if(e.getOppositeWindow() == null){
// will be null when another application window gets activated, stop recording
}
for(Window w : appFrame.getOwnedWindows()){
if(w.equals(e.getOppositeWindow())){
// one of the windows owned by the frame is active, don't stop recording
}
}
}
Тогда вы сможете определить, покинул ли фокус окна ваше приложение или же фокус просто изменился на другое дочернее окно / диалоговое окно.