PDA

View Full Version : [Java] chiusura finestra da Pulsante


d_cainoii
23-07-2010, 14:09
Ciao a tutti :) ho un problema che non riesco a risolvere, cercherò di generalizzare un pochino così da semplificare:
Ho due classi, un classe principale, facciamo il Main e una classe secondaria chiamata Finestra
Finestra ha l'unico scopo di creare una finestra, tramite Jpanel e Jframe il quale contiene un'unico bottone "chiudi", premendo il suddetto bottone dovrebbe chiudersi la finestra ma non il Main
ho cercato a lungo su internet ma non sono riuscito a trovare una soluzioni, perchè ho provato a usare:
setVisible all'interno dell'evento del pulsante ma scompariva solo il frame lasciando il Panel, quindi di concetto rimaneva aperta una finestra vuota.
dispose() invece dovrebbe essere messo solo nella classe Main, quindi risulterebbe inutile
potete aiutarmi? io avevo pensato che se riuscissi a fare in modo che la Classe Finestra vedesse il nome con il quale è stata inizializzata nel Main, potrebbe agire su se stessa chiudendosi con il dispose() altrimenti non so...
il codice per generare la finestra è il seguente:
Sovrascrivi File=new Sovrascrivi(txt, nomeFile.getText());
fin.add(File);
fin.setLocation(600, 200);
fin.setSize(300, 300);
fin.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
fin.setVisible(true);

Spero che riusciate ad aiutarmi :) grazie

banryu79
23-07-2010, 14:30
Ho due classi, un classe principale, facciamo il Main e una classe secondaria chiamata Finestra
Finestra ha l'unico scopo di creare una finestra, tramite Jpanel e Jframe il quale contiene un'unico bottone "chiudi", premendo il suddetto bottone dovrebbe chiudersi la finestra ma non il Main

Molto semplicemente, nel metodo actionPerformed dell'ActionListener registrato sul tuo bottone "chiudi" crei un WindowEvent con il messaggio "Window Closing" e lo invii al JFrame da chiudere.
Ovviamente devi avere a disposizione un riferimento a quel JFrame.

Esempio (FRAME è il riferimento al JFrame da chiudere).

...

public void actionPerformed(ActionEvent e) {
WindowEvent close = new WindowEvent(FRAME, WindowEvent.WINDOW_CLOSING);
FRAME.dispatchEvent(close);
}


In questo modo invece di chiamare un setVisible(false) sul JFrame piuttosto che un dispose(), gli verrà inviata una "generica" richiesta di chiusura che il tuo JFrame onorerà secondo la politica di chiusura che gli hai impostato quando gli hai detto:

...
fin.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
...

In questo modo, in altre parole, premere sul tuo bottone "chiudi" risulterà equivalente al premere sul bottone-icona di chiusura della finestra che è normalmente presente nella barra del titolo.