PDA

View Full Version : [JAVA]Menu grafici


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.

MEMon
18-09-2006, 15:28
Ma il setModal(boolean) della JDialog ha effetto solo prima di renderla visibile?
Cioè se la creo non modale e la rendo visibile, poi non c'è modo di farla diventare modale quando mi pare?

andbin
18-09-2006, 15:55
Non puoi usare un JLayeredPane???

MEMon
18-09-2006, 16:21
Oddio non saprei non lo conosco!
Se me l'hai proposto significa che ci sarà un motivo vero? Io dall'alto della mia ignoranza non conosco questo componente! :D

Non è che mi spiegheresti un attimo le sue proprietà?
Dalla doc vedo che permette di avere tanti componenti sovrapposti e di spostarli avanti indietro come si desidera.
Così a prima vista potrebbe fare al caso mio!
Ma è possibile fermare un thread quando un certo componente è visualizzato?
A me questo interessa!

MEMon
18-09-2006, 16:32
Mi sto guardando la doc ma mi sembra che non possa essere bloccato come una JDialog modale, sbaglio?

MEMon
18-09-2006, 17:40
Andbin mi hai messo la pulce nell'orecchio ora! Non lasciarmi nella mia ignoranza! :D