GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

[RESOLVIDO] Fechar Frame sem System.exit


#1

Essa é a parte do meu code que cuida disso. Podem me ajudar? Tentei fazer alguma forma de invocar o .dispose() mas não serviu muito.

  this.setMinimumSize(new Dimension(1920, alturaPanel));
        this.setLayout(new BorderLayout());
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                Object[] confirm = {"Sim", "Não"};
                int confirmaFechar = JOptionPane.showOptionDialog(null, "Deseja realmente fechar a visualização?", "Logout", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, confirm, confirm[0]);
                if (confirmaFechar == 0) {
                
                }
            }
        });

#2

Ué, como assim o dispose(), não serviu? Deu algum erro?

Vc pode usar o this.setVisible(false);


#3

Oi Abner!

Então, o “this” até onde eu estou entendendo não está se referenciando ao JFrame, e eu n sei pq! :C


#4

O lance todo (até onde eu to imaginando) é que você está HERDANDO a classe JFrame. O this dentro do WindowAdapter está “apontando” para o objeto (Acredito que esses não sejam os termos certos e eu realmente não sei. Uma ótima pergunta para o nosso caro amigo @staroski) WindowAdapter que você cria

, não para sua classe. Para isso, você usaria o super para se referenciar à classe que sua classe herda.

Fez sentido? Não sei se consegui explicar bem, mas é mais ou menos isso. Seu código ficaria algo desse tipo (dentro daquele if vazio):

suaClasse.super.dispose();

Espero que possa ter esclarecido. Desculpe se algo ficou confuso!


#5

Uau, funcionou perfeitamente!!!

@Abner_Rodrigues e @FearX, muito obrigado! Uma última dúvida, estava lendo sobre lambdas (o recurso do Java 8) e eu tentei implementar nessa parte aqui:

Mas não deu muito certo. Não sei se foi na implementação ou se simplesmente não dá pra usar aqui. Vocês sabem algo sobre isso?


#6

Lambda só funciona em interfaces que definem um único método e a interface WindowListener define vários métodos.