Получить любой / все активные JFrames в приложении Java? - PullRequest
16 голосов
/ 09 сентября 2011

Есть ли способ из приложения Java перечислить все открытые / активные в данный момент (я не уверен в терминологии здесь) JFrames, которые видны на экране?Спасибо за вашу помощь.

Ответы [ 3 ]

26 голосов
/ 09 сентября 2011

Frame.getFrames() возвращает массив всех кадров.

Как уже упоминалось @mKorbel, Window.getWindows() вернет все окна - поскольку Frame (& JFrame) расширяет Window, что обеспечит все кадры, а затем и некоторые. Необходимо будет выполнить их итерацию, чтобы узнать, какие из них видны в данный момент.

0 голосов
/ 08 июля 2017

Frame.getFrames() сделает вашу работу.

Из документа оракула:

Возвращает массив всех фреймов, созданных этим приложением.При вызове из апплета массив включает в себя только те кадры, которые доступны этому апплету.

Простой пример:

//all frames to a array
Frame[] allFrames = Frame.getFrames();

//Iterate through the allFrames array
for(Frame fr : allFrames){
    //uncomment the below line to see frames names and properties/atr.
    //System.out.println(fr);        

    //to get specific frame name
    String specificFrameName = fr.getClass().getName();

    //if found frame that I want I can close or any you want
    //GUIS.CheckForCustomer is my specific frame name that I want to close.
    if(specificFrameName.equals("GUIS.CheckForCustomer")){
        //close the frame
        fr.dispose();
    }
}

Также вы можете использовать Window.getWindows() как уже упоминалось.

0 голосов
/ 08 мая 2016

Я согласен с комментарием Стефана Райха.

Очень полезным методом является Window.getOwnedWindows() ... и одним контекстом, где он полезен, если не обязателен, является TDD (тест-ориентированная разработка): в(интеграционный) тест, где у вас есть различные Window объекты на дисплее (JDialog и т. д.), если что-то пойдет не так, как обычно до завершения теста (или даже если он заканчивается нормально), вам часто захочется избавиться отподчиненные окна в коде очистки тестов.Примерно так (в JUnit):

@After
public void executedAfterEach() throws Exception {
    // dispose of dependent Windows...
    EventQueue.invokeAndWait( new Runnable(){
        @Override
        public void run() {
            if( app.mainFrame != null ){
                for( Window window : app.mainFrame.getOwnedWindows() ){
                    if( window.isVisible() ){
                        System.out.println( String.format( "# disposing of %s", window.getClass() ));
                        window.dispose();
                    }
                }
            }
        }
    });
}
...