MEMon
18-09-2006, 14:36
Per creare dei menu grafici(per menu intedo dei pannelli che ospitano dei JComponent) sto utilizzando dei JDialog.
In pratica ogni menu è un JDialog, quando premo un pulsante che mi porta in un menu non faccio altro che far apparire il JDialog corrispondente e far scomprarie quello che ospitava il pulsante appena premuto.
Il problema è che c'è un piccolissimo lasso di tempo in cui il JDialog appare ma è ancora bianco, è veramente breve, e crea un effetto "flash" bianco che vorrei eliminare.
Mi sa che questo problema è dovuto al fatto che per disegnare il contenuto del JDialog ci mette un po', visto che ci sono anche immagini e molto componenti, quindi credo che l'unica cosa da fare è rendere visibili tutti i menu(non sono molto sono 4-5) ma fuori schermo in modo che l'utente non possa vederli.
In questo modo mi basterebbe portarli nella zona visibile dello schermo quando mi servono.
Il problema è che mi verrebbe poi a mancare la caratteristica principale che mi ha portato a scegliere il JDialog, ovvera la possibilità di bloccare il Thread che chiama JDialog.setVIsible(true) fintanto che il JDialog(modale) è attivo.
Quindi la domanda è: come posso fare a simulare una cosa del genere?
Esempio:
...
boolean modale=true;
MyDialog dialog=new MyDialog(modale);
dialog.setVisible(true);//Rendo visibile la JDialog(modale) e blocco l'esecuzione del thread corrente
datiImportanti=dialog.getData();
...
Devo quindi creare qualcosa che quando rendo visibile la JDialog mi blocchi il thread corrente.
Io ho provato a creare un metodo mostra() di questo tipo:
mostra(){
setBounds(schermoVisibile); //porta la JDialog( già visibile) in una zona dello schermo visibile
while(ocupato){
Thread.yield();
}
}
Ma non va, il contenuto della JDilaog non viene disegnato.
In pratica ogni menu è un JDialog, quando premo un pulsante che mi porta in un menu non faccio altro che far apparire il JDialog corrispondente e far scomprarie quello che ospitava il pulsante appena premuto.
Il problema è che c'è un piccolissimo lasso di tempo in cui il JDialog appare ma è ancora bianco, è veramente breve, e crea un effetto "flash" bianco che vorrei eliminare.
Mi sa che questo problema è dovuto al fatto che per disegnare il contenuto del JDialog ci mette un po', visto che ci sono anche immagini e molto componenti, quindi credo che l'unica cosa da fare è rendere visibili tutti i menu(non sono molto sono 4-5) ma fuori schermo in modo che l'utente non possa vederli.
In questo modo mi basterebbe portarli nella zona visibile dello schermo quando mi servono.
Il problema è che mi verrebbe poi a mancare la caratteristica principale che mi ha portato a scegliere il JDialog, ovvera la possibilità di bloccare il Thread che chiama JDialog.setVIsible(true) fintanto che il JDialog(modale) è attivo.
Quindi la domanda è: come posso fare a simulare una cosa del genere?
Esempio:
...
boolean modale=true;
MyDialog dialog=new MyDialog(modale);
dialog.setVisible(true);//Rendo visibile la JDialog(modale) e blocco l'esecuzione del thread corrente
datiImportanti=dialog.getData();
...
Devo quindi creare qualcosa che quando rendo visibile la JDialog mi blocchi il thread corrente.
Io ho provato a creare un metodo mostra() di questo tipo:
mostra(){
setBounds(schermoVisibile); //porta la JDialog( già visibile) in una zona dello schermo visibile
while(ocupato){
Thread.yield();
}
}
Ma non va, il contenuto della JDilaog non viene disegnato.