Как я могу получить количество видимых окон моего приложения? - PullRequest
3 голосов
/ 15 августа 2011

Или точнее:

Мне нужно знать о событии закрытия окна, если какое-либо другое окно все еще видно.

Если нет, то будет вызван System.exit(0).

Ответы [ 4 ]

4 голосов
/ 15 августа 2011

1) I need to know on a window close event

есть WindowConstants и WindowEvent

2) if any other window is still visible.

вы можетеполучить количество контейнеров верхнего уровня , используя Window[] wins = Window.getWindows(); для проверки их видимости или добавив WindowStateListener

некоторые важные замечания здесь

2 голосов
/ 15 августа 2011

Спасибо всем за ответы.С этой помощью мне удалось получить рабочее решение:

Странно, оно не работает с windowClosed.Работает только с windowClosing.

Код

public final class CloseOnLastWindowListener extends WindowAdapter {

    @Override
    public void windowClosing(WindowEvent e) {
        System.out.println("\tCLOSING!!!");

        int nRelevant = 0;
        for (Window w : Window.getWindows()) {
            // get only visible windows, except the one being closed
            if (w != e.getWindow() && w.isVisible()) {
                System.out.println("\tRELEVANT: " + w);
                ++nRelevant;
            } else {
                System.out.println("\tirrelevant: " + w);
            }
        }

        if (nRelevant == 0) {
            System.out.println("\tEXIT!!!");
            System.exit(0);
        }
    }
}
2 голосов
/ 15 августа 2011

Попробуйте

if(Frame.getFrames().length == 0) {
    // work here.
}

(Frame - это java.awt.Frame, то есть родительский элемент JFrame, так что вы их тоже захватите).

1 голос
/ 15 августа 2011

Мне нужно знать о событии закрытия окна, если какое-либо другое окно все еще видно.В противном случае будет вызван System.exit (0).

Просто используйте:

frame.dispose();

Когда закроется последнее окно, JVM автоматически закроется.

Или при создании фреймов и диалогов используйте:

frame.setDefaultCloseOperation(JFrema.DISPOSE_ON_CLOSE);
...