Newsgroup: it.comp.java
Titolo: [Lunghetto] Swing e interfacce utente

Ola!,
	forse non è il titolo più adeguato, ma non sapevo bene come "indicare" il 
subject, cmq il problema che ho è il seguente.
Sto cercando di aggiungere un'interfaccia grafica ad un programma già 
esistente. Mi sono creato tutte le mie belle finestrelle, menù & C.
Questa interfaccia andrebbe a gestire un programma "in dos", ovvero in solo 
testo. Il fatto è che nel programma, ci sono dei punti in cui viene 
richiesto un'input all'utente tramite delle finestre (AWT) con dei 
radioButton. Il programma resta in attesa della scelta in questo punto
while (finestraScelta.getScelta() == -1) {},
così facendo non si prosegue nell'esecuzione del metodo fintanto che non 
viene effettuata la scelta.
Visto che non so ancora se è possibile spezzare la sequenza di 
inzializzazione del programma in vari step, ho pensato di fare la stessa 
cosa anche io, ovvero nella mia finestra swing con la lista delle opzioni ho 
messo lo stesso metodo getScelta che non fa altro che ritornare (tramite una 
return) il valore di una variabile (che è poi l'indice del radioButton 
selezionato).
Il problema è che nella finestra principale dell'interfaccia, non mi compare 
nemmeno la finestra con le opzioni (pre la precisione, la finestra "main" è 
un JFrame, mentre la finestra della opzioni è un JInternalFrame (per 
ottenere un effetto "SDI").
Ho provato eseguendo il codice passo passo ed effettivamente arriva al loop 
in cui testo continuamente il valore della scelta con getScelta, ma non ha 
ancora disegnato una singola riga della finestra opzioni.
C'è qualche modo per far si che prima venga disegnata la finestra e poi si 
prosegua con l'esecuzione del metodo in cui è stata creata la finestra 
opzioni stessa? Oppure una qualche istruzione (tipo un DoEvents per chi 
conosce VB) che dica alla JVM di non "bloccarsi" nel loop ma di eseguire 
anche gli altri compiti?
Grazie in anticipo
-- 
(¯`·.¸_¸.·´¯`·.¸_¸.·´¯)
  byZ, doGmaI
 
dog...@despammed.com
  ICQ# 170836495
(_¸.·´¯`·.¸_¸.·´¯`·.¸_)

 ottenere un effetto "SDI").
Potresti, invece, usare una JDialog modale che č bloccante,
oppure usare un protocollo con semafori usando i metodi lock()
e notify() su una variabile statica.
Federico

 Federico
Non c'è modo di mettere modale un JInternalFrame?


 (_¸.·´¯`·.¸_¸.·´¯`·.¸_)
Non mi sembra...
Federico

 Non mi sembra...
Ed invece inserire un JDialog all'interno di un JDesktopPane come faccio con
i JInternalFrame?



No, JDialog estende Window e non può essere usato come argomento per add().
Puoi estendere JInternalFrame e fare in modo che show() si blocchi fino a
che non si
verifica qualche evento:
...
private Object LOCK = new Object();
public void show()
{
   super.show();
   blocca();
}
public void blocca()
{
      try
      {
        LOCK.wait();
      }
      catch (InterruptedException ex)
      {
      }
}
public void sblocca()
{
   synchronized (LOCK)
   {
      LOCK.notify();
   }
}
...
Usi sblocca nel listener che vuoi. Non l'ho provato il codice, ma a occhio
dovrebbe fermare l'esecuzione dopo show(); quindi invece di
...
while (finestraScelta.getScelta() == -1) {}
switch (finestra.getScelta())
...
avrai:
...
finestraScelta.show() // <- esecuzione bloccata
switch (finestra.getScelta())
...
oppure
...
finestraScelta.blocca() // <- esecuzione bloccata
switch (finestra.getScelta())
...
pensandoci bene, l'overload si show() è superfluo, se non
controproducente.
Federico

 Federico
Bella!, proverò questo.
Grazie
