Скрыть JWindow, когда апплет не виден?

Я создаю JWindow в своем апплете, чтобы отобразить процесс обновления, и устанавливаю владельца родительского апплета. Моя проблема в том, что JWindow отображается на всех вкладках моего браузера, а не только на той, которая содержит мой апплет. Можно ли добавить прослушиватель, чтобы знать, когда мой апплет виден? (А затем скрыть JWindow, когда это не так)


person thomas.fogh    schedule 12.09.2011    source источник
comment
просто вопрос, убедитесь, что есть JApplet, а не Applet, не так ли?   -  person mKorbel    schedule 12.09.2011


Ответы (2)


Апплеты добавляются в системный фрейм, когда они отображаются, поэтому вы можете использовать WindowListener. Я добавил следующий код в метод init() JApplet:

Window window = SwingUtilities.windowForComponent(this);
window.addWindowListener( new WindowAdapter()
{
    @Override
    public void windowActivated(WindowEvent e)
    {
        displayWindow.setVisible( true );
    }

    @Override
    public void windowDeactivated(WindowEvent e)
    {
        displayWindow.setVisible( false );
    }
});
person camickr    schedule 13.09.2011
comment
Спасибо! Работает почти идеально. После того, как я переключился с другой вкладки, мне нужно нажать на апплет, чтобы активировать его... - person thomas.fogh; 13.09.2011
comment
Итак, ваш первоначальный вопрос решен, и вы должны принять ответ. В приведенном выше примере window относится к окну, содержащему апплет. Возможно, вы можете запросить фокус на окне в методе windowActivated. - person camickr; 13.09.2011
comment
И сделать новое шоу jWindow, когда апплет виден? ;) Нет смысла запрашивать фокус при вызове windowActived, так как проблема в том, что он не вызывается до тех пор, пока апплет не получит фокус... - person thomas.fogh; 14.09.2011

Я не особо разбираюсь в апплетах, но я думаю, что для этого и нужны методы start() и stop(). Вы должны сделать окно видимым в start() и скрыть окно в stop().

person camickr    schedule 12.09.2011
comment
как я правильно понял JWindow все еще onFront(), даже он переключился (например FirefoxMozilla) на вкладку другого браузера - person mKorbel; 12.09.2011
comment
Я только что попытался использовать функции запуска / остановки. Они не вызываются, когда я переключаюсь между вкладками... - person thomas.fogh; 12.09.2011
comment
Хм, я сделал тест, используя appletviewer. Когда я сворачиваю/восстанавливаю кадр, вызываются методы start/stop. Однако, когда я попытался запустить апплет в IE, а затем свернуть/восстановить IE, ничего не произошло, поэтому я не понимаю цели этих методов. - person camickr; 13.09.2011