PDA

View Full Version : [JAVA]Menu grafici


MEMon
18-09-2006, 15: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, 16: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, 16:55
Non puoi usare un JLayeredPane???

MEMon
18-09-2006, 17: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, 17:32
Mi sto guardando la doc ma mi sembra che non possa essere bloccato come una JDialog modale, sbaglio?

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

Hardware Upgrade Forum Database Error
Database Error Database error
The Hardware Upgrade Forum database has encountered a problem.

Please try the following:
  • Load the page again by clicking the Refresh button in your web browser.
  • Open the www.hwupgrade.it home page, then try to open another page.
  • Click the Back button to try another link.
The www.hwupgrade.it forum technical staff have been notified of the error, though you may contact them if the problem persists.
 
We apologise for any inconvenience.