Получить любые/все активные JFrames в приложении Java?
Есть ли способ из приложения Java, чтобы отобразить все текущие открытые/активные (я не уверен здесь в терминологии) JFrames
, которые видны на экране? Благодарим за помощь.
Ответы
Ответ 1
Frame.getFrames()
возвращает массив всех фреймов.
В качестве альтернативы, как упоминалось в @mKorbel, Window.getWindows()
вернет все окна - поскольку Frame
(& JFrame
) продолжит Window
, который предоставит все кадры, а затем некоторые. Необходимо будет повторить их, чтобы узнать, какие из них в настоящее время видны.
Ответ 2
Я согласен с комментарием Стефана Рейха.
Очень полезным методом является Window.getOwnedWindows()
... и один контекст, где полезно, если не важно, TDD (Test-Driven Development): в тесте (интеграция), где у вас есть различные объекты 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();
}
}
}
}
});
}
Ответ 3
Frame.getFrames()
выполнит вашу работу.
От oracle Doc:
Возвращает массив всех фреймов, созданных этим приложением. Если вызвано из апплета массив включает только Frames, доступные для этого апплет.
Простой пример:
//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()
, как упоминалось ранее.