Fechando várias janelas ao mesmo tempo

3 respostas
A

Olá gente,
minha duvida é a seguinte.

Estou desenvolvendo uma aplicação onde eu uso tanto jframe quanto jdialog, já desenvolvi antes com esses dois, mas agora o que estou fazendo é diferente, pois, quero que, assim que abra uma janela, ela saia fechando a outras que estaria aberta, (exemplo: tem 4 janelas abertas, mas assim que fosse aberta uma 5º janela, ao abri-la, as outras abertas fossem fechadas logo em seguida), tentei diversas formas envolvendo a função dispose(), mas até agora nada.

Se alguém tiver uma solução ai estarei agradecido.

3 Respostas

D

Existem varias formas de fazer isso, uma bem fácil seria usando Singleton:

public enum Janelas {
  INSTANCIA;
  private List<Window> lista = new LinkedList<>();
  public void adicionar(janela) {
    lista.add(janela);
  }
  public void fecharPrimeira() {
    lista.remove(0).dispose();
  }
  public void fecharTodas() {
    while(!lista.empty()) {
      fecharPrimeira();
    }
  }
}

public class Janela1 extends JFrame {
  public Janela1() {
    super();
    Janelas.INSTANCIA.adicionar(this);
  }
}
public class Janela2 extends JDialog{
  public Janela2() {
    super();
    Janelas.INSTANCIA.fecharTodas();
    Janelas.INSTANCIA.adicionar(this);
  }
}
A

Olha, a ideia é boa, mas a unica dúvida sobre esse código é…onde que se coloca isso ? HEHE

D

O código do enum Janelas e das classes Janela1 e Janela2 seriam colocadas em cada um arquivo diferente. Se não souber, poderia pesquisar sobre “Orientação a Objetos”.

Uma alternativa mais simples, procure a classe onde inicia a aplicação (onde o método main se encontra). Crie uma variável estática do tipo List e use para adicionar, remover e fechar as janelas. Exemplo:

public class Aplicação {
  public static final LinkedList<Window> JANELAS = new LinkedList<>();
  public static void main(String[] args) {
    /***** código *****/
  }
}

Depois para acessar aquela lista em qualquer lugar:

while(!Aplicação.JANELAS.isEmpty()) { // enquanto não estiver vazia
    Window janela = Aplicação.JANELAS.remove(0); // remove a primeira
    janela.dispose(); // fecha
}

para adicionar na lista:

JFrame frame = new JFrame();
JDialog dialog = new JDialog();
Aplicação.JANELAS.add(frame);
Aplicação.JANELAS.add(dialog);
Criado 9 de fevereiro de 2018
Ultima resposta 10 de fev. de 2018
Respostas 3
Participantes 2