2014-09-26 3 views
0

Итак, у меня есть два класса: Main и MakeUserWindow, внутри моего класса Main Я вызываю MakeUserWindow несколько раз с разными параметрами с помощью цикла. Единственная проблема заключается в том, что это создает несколько окон, которые перекрывают друг друга (что не так много, просто я могу получить 20 окон поверх каждого другого). То, что я думал делать, просто использовало window.dispose(); прямо перед вызовом экземпляра, однако, когда я это делаю, он закрывает все экземпляры окна. Не позволяя мне воссоздать экземпляр с использованием той же переменной. Есть ли способ закрыть только один экземпляр, такой как window.close();, о котором я не знаю, или у меня есть лучший способ сделать это? Я искал какое-то время, прежде чем приходить сюда, никаких результатов не помогло.Закрытие только одного экземпляра JFrame?

Для некоторых ссылок, вот упрощенная версия того, что я делаю

(MakeUserWindow это класс, который расширяет JFrame)

MakeUserWindow newWindow; 

for(stuff){ 

    newWindow.dispose(); 
    newWindow = new MakeUserWindow("parameters here"); 
} 

EDIT --- Причина инициализирую MakeUserWindow вне цикл - это потому, что мне нужно использовать свойства newWindow.

Спасибо за чтение, -Zach.

+0

Можете ли вы предоставить код, в котором вы экземпляр все MakeUserWindows, или это он? Из логики, которую вы представили, «осиротевшие» окна не должны закрываться. – Compass

+1

[См. Здесь] (http://stackoverflow.com/questions/1234912/how-to-programmatically-close-a-jframe) как закрыть JFrame – Benvorth

+0

Я вызываю MakeUserWindow в нескольких разных местах, каждый раз, когда я его называю I передайте ему строку, которая определяет, какое окно создано, например «idWindow», «addWindow» и т. д. Это окно пользователя фактически не вызывается в цикле for, а в методе, который вызывается несколько раз по всей программе , – Althonos

ответ

1

Я испытал это, и это то, что я получил:

JFrame frame = new JFrame(); 
    for (int i = 0; i < 5 ; i++) { 
     frame.dispose(); 
     frame = new JFrame(); 
    } 

Более или менее, как ваш код. Остался только последний кадр, потому что вы закрываете остальные, когда вы выполняете «.dispose()». Что вы можете сделать, это Карта, которая хранит все экземпляры.

Map<String, JFrame> frames = new HashMap<String, JFrame>(); 
    JFrame frame = new JFrame(); 
    for (int i = 0; i < 5 ; i++) { 
     frame = new JFrame(); 
     frames.put("Window" + i,frame); 
    } 

И если вы хотите, чтобы закрыть рамку вы делаете:

frames.get("WindowX").dispose(); 
Смежные вопросы