Laboratorio di Interfacce Grafiche
Soluzioni ad alcune parti dell'esercizio 1
Secondo punto della parte (1)
Si chiedeva:
-
(Nella versione Swing)
Modificare il comportamento del bottone appena aggiunto in modo
tale che faccia apparire una finestra di dialogo che chiede
conferma all'utente se terminare, e termina solo
in caso di risposta affermativa.
Come si puo' fare:
-
Modo 1:
Usare un metodo predefinito che mostra un dialogo adatto allo scopo.
Diversamente da quanto scritto nel testo, il metodo piu'
conveniente da usare e' JOptionPane.showConformDialog
(e non JOptionPane.showOptionDialog, che e' piu' versatile ma qui
non serve, e richiede troppi parametri).
La cosa importante da capire e' che JOptionPane.showConformDialog
fa tutto da solo:
mostra il dialogo, attende che l'utente prema un tasto,
chiude il dialogo, restituisce il codice del tasto premuto.
C'era poi un problema relativo a come accedere al frame mentre si sta
definendo l'action listener del bottone.
Si puo' usare un trucchetto: partire dal bottone (oggetto che ha causato
l'evento) e risalire la gerarchia di contenimento fino al frame.
Vedere ShowDialogExample1.java.
-
Modo 2:
Creare un dialogo adatto allo scopo e poi mostrarlo.
Il pannello del dialogo si puo' realizzare con un JOptionPane.
Diversamente da quanto scritto nelle dispense (errato)
un dialogo avente questo pannello va creato con un metodo apposta
p.createDialog della classe JOptionPane (dove p
e' il pannello appena creato).
Questo metodo oltre a creare un dialogo avente come pannello di contenuto
quello assegnato, definisce anche event listener per i bottoni contenuti
nel pannello, il cui effetto e' chiudere la finestra di dialogo.
Dunque quando l'utente preme un bottone sul dialogo, il dialogo
si chiude.
Se si crea un dialogo a parte e gli si assegna p come
pannello di contenuto, questo NON assegna alcun listener ai bottoni,
per cui succede che quando l'utente li preme il dialogo resta li'.
Vedere ShowDialogExample.java.