Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Conferma uscita JFrame

  1. #1

    Conferma uscita JFrame

    Ciao a tutti
    Volevo creare una finestra di conferma uscita dal mio programma, ma nel momento in cui premo la X di uscita, la finestra del JFrame si chiude ugualmente.
    Nel caso specifico chiede la conferma e indipendentemente dal tasto selezionato (SI/NO) la finestra si chiude e il programma si arresta.

    in basso uno stralcio del codice scritto


    codice:
    public class FrameLeague extends JFrame implements ActionListener{
         ....
         ....
         ....
         public FrameLeague(){
              ....
              ....
              ....
              setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
              ....
              ....
              this.addWindowListener(new WindowAdapter(){
                   public void windowClosing(WindowEvent e){
                            exit();
                        
                   }    
              });
              
    }
    
    
         private void exit(){
               int choose = JOptionPane.showConfirmDialog(FrameLeague.this, "Vuoi uscire?", "Conferma", JOptionPane.YES_NO_OPTION);
    
    
              if (choose == JOptionPane.YES_OPTION) {                             
                       copyDB();
                       quit();
              }     
         }
    }


    Cos'è che sbaglio?
    C'è qualcosa che devo aggiungere?

    Grazie.
    Ultima modifica di schumy2000; 17-02-2015 a 13:15
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    A me il tuo codice funziona perfettamente.
    Sicuro che non ci sia altro?


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    infatti immaginavo.
    nel costruttore è presente anche questa riga di codice:
    codice:
      dframe.getDesktop().setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
    E' questa che può dare fastidio?

    Passo l'intera classe così possiamo capire se c'è qualcosa che da fastidio

    codice:
    public class FrameLeague extends JFrame implements ActionListener {
        /**
         * 
         */
        static final Logger logger = Logger.getLogger(FrameLeague.class.getName());
        private Login log;
        private static final long serialVersionUID = 1L;
        private DesktopFrame dframe;
        
        
    
        public final static int OFFSETX=0;
        public final static int OFFSETY=100;
        private Dimension screenSize;
        
        public FrameLeague() {
            super("Test A");
    
    
            //Make the big window be indented 50 pixels from each edge
            //of the screen.
            int inset = 0;
            Toolkit kit=Toolkit.getDefaultToolkit();
            screenSize = kit.getScreenSize();
            ImageIcon smallImg=(ImageIcon)AppResources.getIcon("ballIcon4.gif");
            setIconImage(smallImg.getImage());
            setBounds(inset, inset, screenSize.width  , screenSize.height );
            //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setDefaultCloseOperation(FrameLeague.DO_NOTHING_ON_CLOSE);
    
    
    
    
            dframe=new DesktopFrame();
            setContentPane(dframe);
            log=new Login(this); //inserimento login
            dframe.getDesktop().add(log);    
            log.setSize(350,160);
            log.setLocation((screenSize.width-350-OFFSETX)/2, (screenSize.height-160-OFFSETY)/2 );
            log.setVisible(true);
            log.setSelected( true );
    
    
            dframe.getDesktopManager().activateFrame( log );
            log.requestFocus();
    
    
            dframe.getDesktop().setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
    
    
            this.addWindowListener(new WindowAdapter(){
                public void windowClosing(WindowEvent e){
                    exit();
                }
            });
            }
        
        private void exit(){
            int confirmed = JOptionPane.showConfirmDialog(FrameLeague.this, 
                        "Are you sure you want to quit?", "Confirm Quit", 
                        JOptionPane.YES_NO_OPTION); 
                
            //Close if user confirmed 
            if (confirmed == JOptionPane.YES_OPTION) 
            {                             
               //Close frame 
                copyDB();
                quit();//minimizedInTrayBar();
            } 
            
        }
        ....
        ....
        ....
    }
    Può darsi il dframe che alla fine è una classe che eredita da JDesktopPane può dare questo "errore"?
    Ultima modifica di schumy2000; 17-02-2015 a 17:06
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  4. #4
    Risolto.
    Sono io che alle volte mi perdo in un bicchiere d'acqua.
    L'errore è che a livello precedente quando istanziavo la FrameLeague avevo inserito anche

    frame.setDefaultCloseOperation(javax.swing.JFrame. EXIT_ON_CLOSE);

    e quindi faceva a pugni con la

    setDefaultCloseOperation(FrameLeague.DO_NOTHING_ON _CLOSE);

    dichiarata nella classe.



    Togliendo quella ottengo il comportamento voluto.

    Grazie ugualmente per il vostro aiuto.
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

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 © 2025 vBulletin Solutions, Inc. All rights reserved.