Используя фокус JFrame (теряется), чтобы остановить запись скриншота? - PullRequest
3 голосов
/ 15 декабря 2009

В своем приложении Swing я использую пользовательский модуль для записи скриншотов.

Тем не менее, я немного зациклен на том, чтобы заставить запись остановиться. Прямо сейчас я проверяю, хочет ли пользователь по-прежнему выполнять запись (это означает, что он еще не нажал кнопку «Стоп») и не закрыто ли приложение (закрытие приложения вызывает постепенную остановку записи).

Проблема в том, что запись будет продолжена, если приложение будет вытеснено позади других приложений или свернуто, что приведет к записи «мусора». Мне нужно остановить запись, когда приложение больше не «в верхней части» экрана. Использование фокуса приложения, похоже, не работает из-за других диалогов и всплывающих окон.

Предложения

1 Ответ

6 голосов
/ 15 декабря 2009

Вы можете попробовать добавить 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
            }
        }

    }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...