Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    10

    Chiusura di un frame: doppia richiesta

    Ciao a tutti

    Dubbio su swing...
    Sto cercando di subordinare la chiusura di una finestra ad un metodo void uscita(), che venga cioè richiamato quando si preme la X di questo oggetto JFrame.
    Il metodo uscita non fa altro che chiedere la conferma con una JConfirmDialog (del tipo "OK","ANNULLA") ed è fatta così:

    codice:
    public void uscita() {
    		
    		int risultato = JOptionPane.showConfirmDialog(principale,"Sei sicuro di voler uscire?","Sei sicuro?",JOptionPane.OK_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE);
    		if (risultato == JOptionPane.OK_OPTION)
    			System.exit(0);
    		
    }
    Per fare in modo che venga richiamata alla pressione di X ho detto alla mia classe di implementare WindowListener e gli ho definito il metodo windowclosing semplicemente in questo modo:

    codice:
    public void windowClosing(WindowEvent e) {
            
    		uscita();		
    }
    Se si preme ok, e si vuole effettivamente uscire tutto funziona.
    Se si preme annulla, la JDialog, invece di sparire, viene riproposta inaspettatamente!
    Perchè??

    Info aggiuntiva:
    Il debug del programma mostra come avviene la chiusura della finestra a livello della classe AWTEventMulticaster
    Vedo come effettvamente la richiesta viene fatta 2 volte! Infatti nella suddetta classe:

    codice:
    public void windowClosing(WindowEvent e) {
            ((WindowListener)a).windowClosing(e);
            ((WindowListener)b).windowClosing(e);
        }
    Che faccio?????

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Ciao, ho provato le poche linee che hai postato nel tupo programma e non mi da l'errore da te menzionato. Sicuro che il problema sia li'?
    codice:
    import java.awt.event.WindowEvent;
    import java.awt.event.WindowListener;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    
    public class Test extends JFrame implements WindowListener{
        public CustomDialog(){
            this.setSize(100,100);
            this.setDefaultCloseOperation(this.DO_NOTHING_ON_CLOSE);
            this.addWindowListener(this);
            this.setVisible(true); 
        }
        
        public void uscita() {
            int risultato = JOptionPane.showConfirmDialog(this,"Sei sicuro di voler uscire?","Sei sicuro?",JOptionPane.OK_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE);
            if (risultato == JOptionPane.OK_OPTION)
                System.exit(0);
        }
        
        public void windowClosing(WindowEvent e) {
            uscita();
        }
        public void windowOpened(WindowEvent e) {}
        public void windowClosed(WindowEvent e) {}
        public void windowIconified(WindowEvent e) {}
        public void windowDeiconified(WindowEvent e) {}
        public void windowActivated(WindowEvent e) {}
        public void windowDeactivated(WindowEvent e) {}
        
        public static void main(String[] args){
            new Test();
        }
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    10
    No, non sono sicuro di dove sia l'errore... ma riconosco nel tuo semplice programma lo schema del mio...
    Vediamo qualche parere in più...

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    10
    Ops... Trovato...

    frame.addWindowListener(this);

    Veniva fatto 2 volte................ :berto:


    Mortificato

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.