Duvida Boba com JFrame

Na hora de fechar o jframe quero colocar:

jopitonpane.showmessagedialog(“Deseja Fechar esta janela”, joptionpane.ye_no_option)

Se clicar no NO, não fechar o jframe.

Alguem pode me ajudar?

Obrigado.

No construtor do seu JFrame defina ele como DO_NOTHING_ON_CLOSE:

Depois, adicione um WindowListener ao seu JFrame, com a confirmação:

seuFrame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent evt) { if (JOptionPane.showConfirmationDialog(SeuFrame.this, "Deseja Fechar esta janela?", JOptionPane.YES_NO_OPTION) != JOptionPane.YES_OPTION) return; dispose(); //Ou System.exit(0), se for a última janela da sua aplicação } }):

Talvez o comando do JOptionPane esteja um pouco errado, fiz de cabeça. Mas você corrige aí, a idéia é essa.

Hehehe,

Eu tava fazendo assim, mas nao tava funcionando, era a porcaria do DO_NOTHING_ON_CLOSE

Hehehe

Vacilei!

[quote=ViniGodoy]No construtor do seu JFrame defina ele como DO_NOTHING_ON_CLOSE:

Depois, adicione um WindowListener ao seu JFrame, com a confirmação:

seuFrame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent evt) { if (JOptionPane.showConfirmationDialog(SeuFrame.this, "Deseja Fechar esta janela?", JOptionPane.YES_NO_OPTION) != JOptionPane.YES_OPTION) return; dispose(); //Ou System.exit(0), se for a última janela da sua aplicação } }):

Talvez o comando do JOptionPane esteja um pouco errado, fiz de cabeça. Mas você corrige aí, a idéia é essa.[/quote]

Cara, do seu jeito funciona perfeito mais nao resolveu meu problema, pois a janela nao esta sendo fechada pelo X la no canto, mas por um CommandButton dentro da janela:

Entao tive que fazer assim:

Codigo do botao:

                public void actionPerformed(ActionEvent e) {
                    try {
                        super.getFrame().dispose();
                        tabPrincipal.remove(getFrame().getRootPane());
                    } catch (UnsupportedOperationException ex) {
                    }

                }

Codigo dispose() da JFrame:

    @Override
    public void dispose() {

        boolean fechar = true;

        if (getRegistro().getId().equals(0l)) {
            if (JOptionPane.showConfirmDialog(this, "Os dados ainda nao foram salvos, deseja fechar a janela?", "Fechar a janale", JOptionPane.YES_NO_OPTION) != JOptionPane.YES_OPTION) {
                fechar = false;
            }
        }

        if (fechar) {
            this.fornecedor = null;
            this.entradaProdutoTableModel = null;
            this.produtoSelecionado = null;
            this.threadFiltro.interrupt();
            this.threadFiltro = null;

            super.dispose();
        }else{
            throw new UnsupportedOperationException();
        }
    }

Assim, se nao for pra fechar dou o throw e no botao de fechar trato esse throw…

Valeu!

Quem falou em commandbutton? Você adicionou um windowListener, como eu falei? É ele que reage ao X.

Desculpa, é que eu nao expliquei o cenario todo…

O JFrame nao esta visivel na tela, eu to apenas colocando o conteudo dele “getRootPane” dentro de um JTabbed, e em cada aba eu adiciono um Label com o nome e icone da janela e um commandbutton que tem a funcao de fechar a aba do jttabedpane, porem, so remover a aba, a janela (jframe) continua ainda instanciada, por isso esse commandbutton que fica na aba chama o dispose do JFrame, entao o codigo meu funcionou do jeito que eu postei ai em cima se nao for para fechar, dou um throw dentro do dispose do jframe, ai nao remove a aba.

Veja a tela:

O CommandButton é o X de cada aba

Sacou?

ah tá… agora sim. :slight_smile: