Conferma esci

di il
16 risposte

Conferma esci

Salve,

vorrei sapere se qualcuno di voi sa come associare un azione alla X che permette di chiudere una finestra.

Io vorrei che quando clicco sulla X invece di uscire direttamente mi uscisse un pannello con scritto?

sicuro di voler uscire?

e poi tramite pulsanti decidere se confermar o meno.

Ho già scritto l'azione e l'ho associata ad un item e funziona perfettamente, ma non so come associarla alla x.

Qualcuno può aiutarmi?

16 Risposte

  • Re: Conferma esci

    Capisco, quindi si può fare solo con le api di Windows?
  • Re: Conferma esci

    L'icona X appartiene ad un tuo programma java?
    Se si non c'è bisogno di funzioni native.
  • Re: Conferma esci

    Uso windows seven e mi diletto a sviluppare programmini in java con NetBeans.

    Una domanda, girovagando in rete ho trovato questo metodo:

    setDefaultCloseOperation();

    se tra parentesi metto JFrame.DO_NOTHING_ON_CLOS E finestra non si chiude invece se scrivo
    EXIT_ON_CLOSE la finestra si chiude.

    Non ci sarebbe un modo per modificarlo e far si che esca prima un JOptionPane dove possa effettuare la scelta, se premo si verifica setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); se premo no setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOS E);?
  • Re: Conferma esci

    Si appartiene ad un mio programma java.

    è la classica x che serve per uscire da qualsiasi applicazione. broswer ecc.

    Praticamente quando esco dal mio programma vorrei che premendo la x mi uscisse:

    Sei sicuro di volere uscire? si-no-annulla.

    se premo si esce, se premo no-annulla non esce.
  • Re: Conferma esci

    Mi sapresti dire come fare?
  • Re: Conferma esci

    Ok, grazie mille, ci provo.

    Spero di riuscirci.
  • Re: Conferma esci

    CRTVLB ha scritto:


    Salve,

    vorrei sapere se qualcuno di voi sa come associare un azione alla X che permette di chiudere una finestra.

    Io vorrei che quando clicco sulla X invece di uscire direttamente mi uscisse un pannello con scritto?

    sicuro di voler uscire?

    e poi tramite pulsanti decidere se confermar o meno.

    Ho già scritto l'azione e l'ho associata ad un item e funziona perfettamente, ma non so come associarla alla x.

    Qualcuno può aiutarmi?
    Ciao,
    innanzitutto devi impostare DO_NOTHING_ON_CLOSE come operazione di default premendo la X:
    frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

    Poi basta aggiungere un WindowListener al JFrame:

    frame.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    int conferma = JOptionPane.showConfirmDialog(null,
    "Sicuro di voler uscire?", "Conferma uscita dal programma",
    JOptionPane.YES_NO_OPTION);

    if (conferma == JOptionPane.YES_OPTION) {
    dispose();
    }
    }
    });

    Ciao!
  • Re: Conferma esci

    Ci sto provando in tutti i modi ma non riesco. Scrivo il codice della Vista che è il mio JFrame mi potresti dire come modificarla per ottenere quello che voglio?
    
    package progetto.progetto1.vista;
    
    import java.util.HashMap;
    import java.util.Map;
    import javax.swing.JDialog;
    import javax.swing.JOptionPane;
    import javax.swing.JScrollPane;
    import progetto.progetto1.Costanti;
    import progetto.progetto1.controllo.*;
    import progetto.progetto1.modello.*;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    
    
    public class Vista extends javax.swing.JFrame {
        
        private Log logger = LogFactory.getLog(this.getClass().getName());
        
        private Modello modello;
        private Controllo controllo;
        private Map<String,Object> mappaSottoViste = new HashMap<String,Object>();
        private JDialog dialogo;
        
        public Vista( Controllo controllo, Modello modello ) {
            logger.info("Creo e Visualizzo la Vista");
            this.controllo = controllo;
            this.modello = modello;
            initComponents();
            inizializza();
            inizializzaSottoViste();
            schermoPrincipale();
            
        }
        
        public Object getSottoViste(String nome){
            return this.mappaSottoViste.get(nome);
        }
        private void inizializza() {
            AzioneEsci ae = (AzioneEsci) this.controllo.getAction(Costanti.AZIONE_ESCI);
            this.itemEsci.setAction(ae);
            AzioneInformazione ai = (AzioneInformazione) this.controllo.getAction(Costanti.AZIONE_INFORMAZIONE);
            this.itemInformazioni.setAction(ai);
            AzioneVisualizzaFinestraAggiungi avfa = (AzioneVisualizzaFinestraAggiungi) this.controllo.getAction(Costanti.AZIONE_VISUALIZZA_FINESTRA_AGGIUNGI);
            this.itemAggiungi.setAction(avfa);
            AzioneCercaPerSegno acs = (AzioneCerca) this.controllo.getAction(Costanti.AZIONE_CERCA);
            this.itemCercaPerSegno.setAction(acs);
            AzioneVisualizzaFinestraVisualizza avfv = (AzioneVisualizzaFinestraVisualizza) this.controllo.getAction(Costanti.AZIONE_VISUALIZZA_FINESTRA_VISUALIZZA);
            this.itemVisualizza.setAction(avfs);
            AzioneElimina ael = (AzioneElimina) this.controllo.getAction(Costanti.AZIONE_ELIMINA);
            this.ItemElimina.setAction(ael);
            AzioneVisualizzaFinestraCerca avfc = (AzioneVisualizzaFinestraCerca) this.controllo.getAction(Costanti.AZIONE_VISUALIZZA_FINESTRA_CERCA);
            this.itemCercaPerData.setAction(avfc);
            AzioneVisualizzaFinestraModifica avfm = (AzioneVisualizzaFinestraModifica) this.controllo.getAction(Costanti.AZIONE_VISUALIZZA_FINESTRA_MODIFICA);
            this.ItemModificaTutto.setAction(avfm);
            AzioneVisualizzaFinestraCercaPerNome avfcpn = (AzioneVisualizzaFinestraCercaPerNome) this.controllo.getAction(Costanti.AZIONE_VISUALIZZA_FINESTRA_CERCA_PER_NOME);
            this.itemCercaPerNome.setAction(avfcps);
            AzioneVisualizzoFinestraModificaSoloData avfmsd = (AzioneVisualizzoFinestraModificaSoloData) this.controllo.getAction(Costanti.AZIONE_VISUALIZZA_FINESTRA_MODIFICA_SOLO_DATA);
            this.ItemModificaSoloData.setAction(avfmsd);
        
        }    
        
        public void finestraInfoApplicazione () {
            StringBuffer stringa = new StringBuffer();
            stringa.append(" \n ");
            stringa.append("Prova di Progetto\n\n");
            JOptionPane.showMessageDialog( this, stringa, " Informazioni Applicazione ", JOptionPane.INFORMATION_MESSAGE);
        }
    
        public Controllo getControllo() {
            return controllo;
        }
    
        public Modello getModello() {
            return modello;
        }
        
        private void schermoPrincipale() {
            PannelloPrincipale pp= (PannelloPrincipale) this.getSottoViste(Costanti.PANNELLO_PRINCIPALE);
            JScrollPane scroll = new JScrollPane(pp);
            this.getContentPane().add(scroll);
            this.pack();
            this.setDefaultCloseOperation(Vista.DO_NOTHING_ON_CLOSE); // qui ho impostato l'operazione di default
            this.setLocationRelativeTo(null);
            this.setVisible(true);
        }
    
       
    
        private void inizializzaSottoViste() {
            this.setTitle("Benvenuto");
           
            this.mappaSottoViste.put(Costanti.PANNELLO_PRINCIPALE,new PannelloPrincipale(this));
            this.mappaSottoViste.put(Costanti.FINESTRA_CERCA, new FinestraCerca(this));
            this.mappaSottoViste.put(Costanti.FINESTRA_AGGIUNGI, new FinestraAggiungi(this));
            this.mappaSottoViste.put(Costanti.FINESTRA_MODIFICA,new FinestraModifica((this)));
            this.mappaSottoViste.put(Costanti.FINESTRA_VISUALIZZA, new FinestraVisualizzaSegno(this));
            this.mappaSottoViste.put(Costanti.FINESTRA_MODIFICA_SOLO_DATA, new FinestraModificaSoloData(this));
            this.mappaSottoViste.put(Costanti.FINESTRA_CERCA_PER_NOME, new FinestraCercaPerSegno(this));
           
        }
        
    
        public void finestraErrore(String string) {
            JOptionPane.showMessageDialog(this,string,"Errore", JOptionPane.ERROR_MESSAGE);
        }
        
        public void visualizzaFinestraWarning(String err){
            JOptionPane.showMessageDialog(this, err, "Attenzione", JOptionPane.WARNING_MESSAGE);
        }
        
        
    }
    
    
    Te ne sarei veramente grato
  • Re: Conferma esci

    CRTVLB ha scritto:


    Ci sto provando in tutti i modi ma non riesco. Scrivo il codice della Vista che è il mio JFrame mi potresti dire come modificarla per ottenere quello che voglio?
    
    package progetto.progetto1.vista;
    
    import java.util.HashMap;
    import java.util.Map;
    import javax.swing.JDialog;
    import javax.swing.JOptionPane;
    import javax.swing.JScrollPane;
    import progetto.progetto1.Costanti;
    import progetto.progetto1.controllo.*;
    import progetto.progetto1.modello.*;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    
    
    public class Vista extends javax.swing.JFrame {
        
        private Log logger = LogFactory.getLog(this.getClass().getName());
        
        private Modello modello;
        private Controllo controllo;
        private Map<String,Object> mappaSottoViste = new HashMap<String,Object>();
        private JDialog dialogo;
        
        public Vista( Controllo controllo, Modello modello ) {
            logger.info("Creo e Visualizzo la Vista");
            this.controllo = controllo;
            this.modello = modello;
            initComponents();
            inizializza();
            inizializzaSottoViste();
            schermoPrincipale();
            
        }
        
        public Object getSottoViste(String nome){
            return this.mappaSottoViste.get(nome);
        }
        private void inizializza() {
            AzioneEsci ae = (AzioneEsci) this.controllo.getAction(Costanti.AZIONE_ESCI);
            this.itemEsci.setAction(ae);
            AzioneInformazione ai = (AzioneInformazione) this.controllo.getAction(Costanti.AZIONE_INFORMAZIONE);
            this.itemInformazioni.setAction(ai);
            AzioneVisualizzaFinestraAggiungi avfa = (AzioneVisualizzaFinestraAggiungi) this.controllo.getAction(Costanti.AZIONE_VISUALIZZA_FINESTRA_AGGIUNGI);
            this.itemAggiungi.setAction(avfa);
            AzioneCercaPerSegno acs = (AzioneCerca) this.controllo.getAction(Costanti.AZIONE_CERCA);
            this.itemCercaPerSegno.setAction(acs);
            AzioneVisualizzaFinestraVisualizza avfv = (AzioneVisualizzaFinestraVisualizza) this.controllo.getAction(Costanti.AZIONE_VISUALIZZA_FINESTRA_VISUALIZZA);
            this.itemVisualizza.setAction(avfs);
            AzioneElimina ael = (AzioneElimina) this.controllo.getAction(Costanti.AZIONE_ELIMINA);
            this.ItemElimina.setAction(ael);
            AzioneVisualizzaFinestraCerca avfc = (AzioneVisualizzaFinestraCerca) this.controllo.getAction(Costanti.AZIONE_VISUALIZZA_FINESTRA_CERCA);
            this.itemCercaPerData.setAction(avfc);
            AzioneVisualizzaFinestraModifica avfm = (AzioneVisualizzaFinestraModifica) this.controllo.getAction(Costanti.AZIONE_VISUALIZZA_FINESTRA_MODIFICA);
            this.ItemModificaTutto.setAction(avfm);
            AzioneVisualizzaFinestraCercaPerNome avfcpn = (AzioneVisualizzaFinestraCercaPerNome) this.controllo.getAction(Costanti.AZIONE_VISUALIZZA_FINESTRA_CERCA_PER_NOME);
            this.itemCercaPerNome.setAction(avfcps);
            AzioneVisualizzoFinestraModificaSoloData avfmsd = (AzioneVisualizzoFinestraModificaSoloData) this.controllo.getAction(Costanti.AZIONE_VISUALIZZA_FINESTRA_MODIFICA_SOLO_DATA);
            this.ItemModificaSoloData.setAction(avfmsd);
        
        }    
        
        public void finestraInfoApplicazione () {
            StringBuffer stringa = new StringBuffer();
            stringa.append(" \n ");
            stringa.append("Prova di Progetto\n\n");
            JOptionPane.showMessageDialog( this, stringa, " Informazioni Applicazione ", JOptionPane.INFORMATION_MESSAGE);
        }
    
        public Controllo getControllo() {
            return controllo;
        }
    
        public Modello getModello() {
            return modello;
        }
        
        private void schermoPrincipale() {
            PannelloPrincipale pp= (PannelloPrincipale) this.getSottoViste(Costanti.PANNELLO_PRINCIPALE);
            JScrollPane scroll = new JScrollPane(pp);
            this.getContentPane().add(scroll);
            this.pack();
            this.setDefaultCloseOperation(Vista.DO_NOTHING_ON_CLOSE); // qui ho impostato l'operazione di default
            this.setLocationRelativeTo(null);
            this.setVisible(true);
        }
    
       
    
        private void inizializzaSottoViste() {
            this.setTitle("Benvenuto");
           
            this.mappaSottoViste.put(Costanti.PANNELLO_PRINCIPALE,new PannelloPrincipale(this));
            this.mappaSottoViste.put(Costanti.FINESTRA_CERCA, new FinestraCerca(this));
            this.mappaSottoViste.put(Costanti.FINESTRA_AGGIUNGI, new FinestraAggiungi(this));
            this.mappaSottoViste.put(Costanti.FINESTRA_MODIFICA,new FinestraModifica((this)));
            this.mappaSottoViste.put(Costanti.FINESTRA_VISUALIZZA, new FinestraVisualizzaSegno(this));
            this.mappaSottoViste.put(Costanti.FINESTRA_MODIFICA_SOLO_DATA, new FinestraModificaSoloData(this));
            this.mappaSottoViste.put(Costanti.FINESTRA_CERCA_PER_NOME, new FinestraCercaPerSegno(this));
           
        }
        
    
        public void finestraErrore(String string) {
            JOptionPane.showMessageDialog(this,string,"Errore", JOptionPane.ERROR_MESSAGE);
        }
        
        public void visualizzaFinestraWarning(String err){
            JOptionPane.showMessageDialog(this, err, "Attenzione", JOptionPane.WARNING_MESSAGE);
        }
        
        
    }
    
    
    Te ne sarei veramente grato
    All'interno dell'overload del costruttore [public Vista( Controllo controllo, Modello modello ){...}]
    alla fine inserisci:
    super.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    super.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    int conferma = JOptionPane.showConfirmDialog(null,
    "Sicuro di voler uscire?", "Conferma uscita dal programma",
    JOptionPane.YES_NO_OPTION);

    if (conferma == JOptionPane.YES_OPTION) {
    dispose();
    }
    }
    });
  • Re: Conferma esci

    Ottimo, funziona tutto alla perfezione.

    Grazie mille!!!
  • Re: Conferma esci

    CRTVLB ha scritto:


    Ottimo, funziona tutto alla perfezione.

    Grazie mille!!!
    Figurati
    Ciao!
  • Re: Conferma esci

    Ti chiedo un'ultima cosa, se non ti è troppo di disturbo.

    il codice funziona perfettamente, ma non mi piace fare le cose meccaniche vorrei anche capire quello che scrivo e come funziona. Mi è tutto chiaro, ma solo una cosa non riesco a capire, come mai super.addWindowClosing si scrive in quel modo, non ho mai scritto un metodo così, nel senso la chiusura con la parentesi tonda dopo la quadra.
  • Re: Conferma esci

    CRTVLB ha scritto:


    Ti chiedo un'ultima cosa, se non ti è troppo di disturbo.

    il codice funziona perfettamente, ma non mi piace fare le cose meccaniche vorrei anche capire quello che scrivo e come funziona. Mi è tutto chiaro, ma solo una cosa non riesco a capire, come mai super.addWindowClosing si scrive in quel modo, non ho mai scritto un metodo così, nel senso la chiusura con la parentesi tonda dopo la quadra.
    Quando tu dichiari public Class Vista extends JFrame{} di fatto crei un oggetto che eredita tutti i metodi e le variabili di istanza della classe JFrame, a cui aggiungi i metodi da te implementati. Se vuoi utilizzare un metodo o una variabile della classe che stai estendendo richiami il termine chiave 'super'.
    Ad esempio se crei un JFrame lo fai con il costruttore
    JFrame frame = new JFrame("Titolo del frame");
    Se crei un classe che estende JFrame la inizializzi così:
    Class Vista extends JFrame{
    super("Titolo del frame");
    ......
    }

    Se invece della tua classe vista avessi avuto un oggetto di tipo JFrame avresti scritto:
    frame.addWindowListener(...{...});
    Siccome tu estendi la classe JFrame scrivi:
    super.addWindowListener(...{...});
  • Re: Conferma esci

    Si l'uso della parola chiave super lo conoscevo, solo che di solito io sono abituato a fare in questo modo:
    
       public void addWindowListener(new WindowAdapter() {
        this.windowClosing(e);
    }
    
    public void windowClosing(WindowEvent e) {
        int conferma = JOptionPane.showConfirmDialog(null,
        "Sicuro di voler uscire?", "Conferma uscita dal programma", JOptionPane.YES_NO_OPTION);
    
        if (conferma == JOptionPane.YES_OPTION) {
            System.exit(o);
        }
    }
    
    Ovviamente scritto così avevo un sacco di errori.

    Comunque ora mi è tutto chiaro, ancora grazie tante.
Devi accedere o registrarti per scrivere nel forum
16 risposte