Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    54

    [Java] jframe setDefaultCloseOperation

    Ciao a tutti,

    volevo sapere se è possibile inserire una custom close operation sui jform.
    Mi piacerebbe fare in modo che ogni volta che clicco sulla x del mio programmino mi appaia un messaggio di conferma con un jlabel e due bottoni "si" e "no".
    si può fare ?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [Java] jframe setDefaultCloseOperation

    Originariamente inviato da rodfval
    volevo sapere se è possibile inserire una custom close operation sui jform.
    Mi piacerebbe fare in modo che ogni volta che clicco sulla x del mio programmino mi appaia un messaggio di conferma con un jlabel e due bottoni "si" e "no".
    si può fare ?
    setDefaultCloseOperation passando DO_NOTHING_ON_CLOSE e poi gestisci quello che vuoi fare, prima di una eventuale chiusura, nel windowClosing di un WindowListener registrato sul frame.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Setti setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOS E) e poi registri un WindowListener sulla finestra.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    54
    Quindi ad esempio in questo modo ?

    codice:
    class NuovoAnnuncio extends JFrame  {
    
    	public NuovoAnnuncio() { super("Inserisci Annuncio");
            initialize();
        }
    
    
     void initialize() {
        	
            setSize(665,620);
            setResizable(false); 
            setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);     
            addWindowListener(new close());
    
    class close implements WindowListener {
    	      public void windowActivated(WindowEvent w) {
    	      }
    
    	      
    		public void windowClosed(WindowEvent w) { 	  
    	      	
    	      
    	      }
    
    	      public void windowClosing(WindowEvent w) {
    	    	  final JFrame uscire = new JFrame();  
    	    	  
    		      	uscire.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);	  
    		      	uscire.setLayout(new FlowLayout());
    		      	uscire.setSize(260,120);
    		      	uscire.setResizable(false);
    		      	JPanel info = new JPanel();
    		          info.setLayout(new GridLayout(0,1));
    		      	
    		      	JTextField salvataggio;     
    		          salvataggio = new JTextField("Uscire dal programma?",12);
    		          salvataggio.setEditable(false);
    		          salvataggio.setFont(labelfont);
    		          JPanel salvaesci = new JPanel();
    		          salvaesci.setLayout(new GridLayout(0,2));
    		          
    		          JButton no = new JButton("No");        
    		          no.setFont(buttonfont);
    		          JButton si = new JButton("Si");        
    		          si.setFont(buttonfont);
    		          info.add(salvataggio);                    		                
    		          salvaesci.add(si); 
    		          salvaesci.add(no);
    		          
    		          uscire.add(info);
    		          uscire.add(salvaesci);
    		          si.addActionListener(new ActionListener() {
    		              public void actionPerformed(ActionEvent event) {              
    		              	System.exit(0);
    		              	
    		                                 
    		              }
    
    		  			
    		              
    		          });
    		          no.addActionListener(new ActionListener() {
    		              @SuppressWarnings("deprecation")
    					public void actionPerformed(ActionEvent event) {           
    		              	
    		              	uscire.hide();	        
    		                                 
    		              }
    		              
    		          });
    		          
    	      }
    
    	      public void windowDeactivated(WindowEvent w) {
    	      }
    
    	      public void windowDeiconified(WindowEvent w) {
    	      }
    
    	      public void windowIconified(WindowEvent w) {
    	      }
    
    	      public void windowOpened(WindowEvent w) {
    	      }
    	    };
    }
        	
    		 	
    			
    	            public void run() {
    	                new NuovoAnnuncio().setVisible(true);
    	                
    	            }
    	        
    			
    		}
    facendo così però non succede nulla quando clicco sulla "X"

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da rodfval
    Quindi ad esempio in questo modo ?

    facendo così però non succede nulla quando clicco sulla "X"
    A parte che non hai reso visibile il frame 'uscire'. Se lo facessi, a grandi linee (e se non ci sono altri errori nel codice, che non ho controllato tutto per bene) dovrebbe funzionare.

    Comunque sappi una cosa: per porre "domande" di questo tipo all'utente si usa tipicamente un JOptionPane. Bastano 2/3 righe .... non 40+ righe come hai dovuto fare per un nuovo JFrame (che comunque non potrebbe essere "modale" rispetto al frame che cerchi di chiudere!).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    54
    Giusto.. non ho resto il frame uscire visibile, ma comunque se dovrei farlo con un JOptionPane come potrei fare ? io li utilizzo solo quando devo inviare messaggi di errore per avvisare l'utente

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da rodfval
    Giusto.. non ho resto il frame uscire visibile, ma comunque se dovrei farlo con un JOptionPane come potrei fare ? io li utilizzo solo quando devo inviare messaggi di errore per avvisare l'utente
    codice:
    int r = JOptionPane.showConfirmDialog(tuoFramePrincipale, "Sei sicuro di voler uscire?",
                    "Uscita", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
    
    if (r == JOptionPane.YES_OPTION) {
        .....
    }
    Se non ho sbagliato a scrivere, l'ho scritto al volo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    54
    grazie di tutto sono riuscito !
    L'unica cosa che non ho capito è:

    non è stato necessario nel JOptionPane specificare il nome ai bottoni "Si" e "No" , non ho capito come mai...

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da rodfval
    grazie di tutto sono riuscito !
    L'unica cosa che non ho capito è:

    non è stato necessario nel JOptionPane specificare il nome ai bottoni "Si" e "No" , non ho capito come mai...
    JOptionPane.YES_NO_OPTION (4° argomento)

    E ci sono altre costanti per altre combinazioni di "opzioni".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.