[Resolvido] Dispose(); Em todas as telas

10 respostas Resolvido
swing
Jhonatan_Moreira

Bom dia, alguém poderia me informar como poderia finalizar todos os JFrames abertos de uma vez, existe algum método que faça isso? Obrigado!

10 Respostas

M

Penso que usar System.exit(0); é o suficiente

Jhonatan_Moreira

Oi, esse método é responsável por encerrar a aplicação, eu gostaria de saber se existe alguma forma de apenas fechar os JFrame e que a aplicação ficasse rodando.

j-menezes

Voce pode guardar as instancias de todos os JFrames e em dado momento
chamar as instancias e usando

frame1.dispatchEvent(new WindowEvent(frame1, WindowEvent.WINDOW_CLOSING));

ou

setVisible(false);

dispose();

Ou ainda ter uma thread dentro de cada JFrame e ficar verificando determinado estado de uma variavel e fazer o fechamento quando cumprir a exigencia

M

A unica maneira que estou a ver é guardar a instancia do jframe cada vez que o abrir e usá-la para o fechar

staroski
public static void fecharTodosOsJFrames() {
    for (JFrame jFrame : obterJanelasDoTipo(JFrame.class)) {
        jFrame.dispose();
    }
}

public static <W extends Window> List<W> obterJanelasDoTipo(Class<W> tipo) {
    List<W> janelas = new LinkedList<>();
    for (Window janela : Window.getWindows()) {
        if (tipo.isAssignableFrom(janela )) {
            janelas.add((W) janela);
        }
    }
    return janelas;
}
Jhonatan_Moreira

As linhas 1,2 e 4 estão com erros e eu não tô conseguindo identificar

1 type list does not take parameters
2 type list does not take parameters
4 imcompatible types: window cannot be converted to class <?>

staroski

Tem certeza que está usando java.util.List?

Qual versão do Java está usando?

Jhonatan_Moreira

Estava faltando o import o que corrigiu o erro da linha1 e 2 mas a linha 4continua com um erro e a palavra janela esta sublinhada apresentando a mensagem

incompatible types: window cannot be converted to class <?>

staroski
Solucao aceita

Falha minha:

public static <W extends Window> List<W> obterJanelasDoTipo(Class<W> tipo) {
    List<W> janelas = new LinkedList<>();
    for (Window janela : Window.getWindows()) {
        if (tipo.isAssignableFrom(janela.getClass())) {
            janelas.add((W) janela);
        }
    }
    return janelas;
}
Jhonatan_Moreira

Testei, funcionou perfeitamente, muito obrigado!

Criado 23 de julho de 2018
Ultima resposta 24 de jul. de 2018
Respostas 10
Participantes 4