PROBLEMA Disabilitare e riabilitare JFrame all'apertura e alla chiusura di un altro.

  • Autore discussione Autore discussione Kelt
  • Data d'inizio Data d'inizio
Pubblicità

Kelt

Nuovo Utente
Messaggi
15
Reazioni
5
Punteggio
27
Salve, ho un problema su cui ci lavoro da giorni e non trovo soluzione, spero di trovare qualcuno che mi possa aiutare.
Ho creato un programma con varie finestre che si aprono da un Frame principale, ora però se io continuo a premere su quei pulsanti apro una moltitudine di nuove finestre.
Cercavo in pratica un modo per disabilitare e riabilitare il form principale alla chiusura del form secondario, per disabilitarlo non è un problema ma è il riabilitarlo, mi hanno suggerito un windows listener ma non ho ben capito come fare a implementarlo su un frame e che operi alla chiusura di un altro frame.
L'ideale era che ci fosse un parametro da attribuire al jframe in modo che concentri il focus su di se, come quando si apre una finestra di dialogo, se qualcuno ha una soluzione ne sarei grato!
 
Vado a memoria perché devo dare una ripassata alle GUI Java.
Puoi fare in questo modo:
quando nella finestra principale premi il pulsante per aprire la finestra secondaria, hai già un listener sul pulsante a cui è associato un metodo che ti apre la finestra secondaria; ti basta aggiungere alla fine del metodo di apertura un'istruzione che disabilita il pulsante della finestra principale
Esempio
JButton principale = ...; // pulsante che apre la finestra secondaria
...
void apriFinestra() { // oppure sul metodo actionPerformed() se hai usato quello
// codice per apertura finestra a cui alla fine aggiungi
principale.setEnabled(false);
}

per riabilitarlo dovrai aggiungere l'istruzione
principale.setEnabled(true);
al metodo che governa la chiusura della finestra secondaria ossia:
prima metti l'istruzione per riabilitare il pulsante principale, e poi il resto del codice di chiusura della finestra
 
Il problema è che la finestra secondaria viene chiusa attraverso la x rossa in alto, un pulsante chiudi sarebbe poco funzionale secondo me :/
Cercando su internet ho trovato i JDialog modali e sto cercando di applicarli, se riesco credo sia la soluzione migliore almeno per ciò che intendo io, dubito si possa creare un JFrame modale
 
puoi ridefinire il metodo di chiusura finestra SECONDARIA aggiungendo a mano un listener alla finestra secondaria stessa;
dentro la classe che definisce f definisci una classe (interna)

private final class ChiusuraFinestra extends WindowAdapter {
public void windowClosing(WindowEvent e){
try {
// istruzione che abilita il bottone della finestra principale
}
catch(Exception ex){// codice per gestire eccezione
}
}
}


Ehm! scusa ma l'indentazione nn funziona sul testo in chiaro del forum
poi basta aggiungere il listener
esempio, qunado apri la finestra secondaria fai qualcosa di simile a
f = new JFrame (...); // è la tua finestrasecondaria
f.addWindowListener( new ChiusuraFinestra() );

Poi ovviamente puoi preferire un modo più comodo, questo funziona
Il metodo windowClosing() riconosce quando premi la "x" (il pulsantino in alto a destra di chiusura finestra). Per esempio puoi aggiungere dell istruzioni per aprire un popup e chiedere "Sei sicuro di voler uscire?".
 
Ultima modifica:
Uhm si ho capito grazie però non è esattamente ciò che mi serve :/
L'effetto ideale lo otterrei con un JDialog, l'unico problema è che non capisco il perché quando imposto su true il setModal mi da un JDialog vuoto, mi spiego:

Ho il mio frame principale:

public class InterfacciaPrincipale() extends JFrame {
.
.
JButton apriDialog = new JButton("apri");
apriDialog.addActionListener(new PremiListener(this));
.
}

public class PremiListener implements ActionListener {

InterfacciaPrincipale frame;

public PremiListener(InterfacciaPrincipale frame) {
this.frame=frame;
}

public void actionPerformed(ActionEvent e) {
new MyDialog(frame,"titolo");
}

public class MyDialog() extends JDialog {

public MyDialog(InterfacciaPrincipale parent,String titolo) {
super(parent,titolo,true)
.
.

Appena imposto true mi apre un JDialog vuoto senza nulla come se non carica tutte le cose inserite dopo super, credo di non aver capito bene il suo funzionamento ma non sto capendo l'errore :/

- - - Updated - - -

Vabbò ho risolto, non ci credo di aver sbattuto giorni per una cosa tanto stupida, a quanto pare la visibilità del JDialog a differenza del JFrame va impostata per ultima, sarà che non ci avrei mai pensato ma vabbè, se a qualcuno può essere utile potrà risolvere così, grazie dell'aiuto comunque :)
 
Pubblicità
Pubblicità
Indietro
Top