Newsgroup: it.comp.java
Titolo: visualizzazione componenti su pannello

Non riesco a far visualizzare in contemporanea dei componenti su di un pannello.
C'e' qualcuno che puo' dare un suggerimento ?
E' possibile sapere quando un LayoutManager ha finito di posizionare i vari
pezzi ?
Ciao
---------------------------------------
Email: sostituire "nospam" con "netsis"

...

Caro Gastone ,
inanzitutto complimenti per il nome.
Per visualizzare dei componenti in un Pannello devi
aggiungerli uno per uno (es.  add)
e poi mostrare il Pannello o il suo contenitore.
Esempio:
  Estendi un frame e aggiungi nel suo codice:
  Panel n = new Panel();
  n.setLayout(new GridLayout(0,1));
  n.add(new Button("Nuovo"));
  n.add(new Button("Help"));
  n.add(new Button("Esci"));
  add("West",n);           // add al frame
e poi mostra il frame con show();
Dovrebbe funzionare,
in ogni caso sarņ lieto di aiutarti.
                                        Ciao
                                            Cristiano 
cristi...@iol.it

e poi mostra il frame con show();
Nel caso di un semplice pannello il metodo show() e' deprecato.
Ti spiego un po' piu' in dettaglio il problema
Nella mia applicazione devono comparire un po' di TextBox, una immagine posta
all'interno di un canvas ed un po' di Button e Choice. Il problema e' che il
numero di controlli che compaiono, il loro contenuto e le loro dimensioni
cambiano non appena si preme un particolare Button.
Per risolvere il problema ho utilizzato uno ScrollPane con le dimensioni pari a
quelle dell'applet. A parte i problemi che mi ha dato tale componente (vedi
altro post) non sono riuscito a settare il layout manager dello ScrollPane.
Ho allora inserito un pannello normale, con dimensioni variabili, all'interno
dello ScrollPane. Tutte le volte che devo cambiare i controlli vorrei far
sparire immediatamente il pannello, generarne uno nuovo oppure aggiornare quello
vecchio e poi fare riapparire la nuova schermata all'interno dello ScrollPane
Per far sparire il pannello ed i suoi componenti ho provato ad utilizzare i
metodi
remove();
isVisible();
per fare ricomparire il tutto ho provato ad utilizzare
add();
repaint();
validate();
validateTree();
doLayout();
(degli ultimi tre non ho capito bene la differenza)
ma non sono riuscito ad ottenere l'effetto di far sparire e ricomparire in
contemporanea i vari componenti
Quando su di una macchina virtuale il funzionamento e' diventato accettabile, mi
accorgo che c'e' qualcosa che non va con un'altra macchina.
Sembra che le varie macchine virtuali siano scarsamente compatibili fra di loro
:-(
Per adesso ho deciso di fare le prove con Navigator 4.06, IE4 e AppletViewer del
JDK 1.1.6
Devo aggiungere che sto lavorando su di una macchina un po' vecchia: Pentium 100
(tirato a 120) con 40M di Ram


>........................................
Ciao Gasto,
penso di aver inquadrato almeno uno dei tuoi problemi.
Per pulire per bene un pannello io di solito faccio una cosa che forse non
ti piacerà subito ma quando  ne vedrai i risultati sarai soddisfatto.
Ad esempio in questi giorni sto scrivendo una applicazione per un solitario
di carte e aggiungo ad un pannello 40 oggetti di tipo Carta (dove Carta è
una classe che estende Canvas).
Ogni volta che devo ricominciare una nuova partita rimuovo tutte le carte
dal pannello, le modifico se necessario e poi le riaggiungo al pannello,
magari prima ridisegno il pannello vuoto ma sembra non sia necessario.
Supponiamo che "gioco" sia il nome dell'oggetto di tipo Panel:
gioco.removeAll();   // rimuovo tutti gli oggetti dal pannello
repaint();   // forse non necessario
// modifico  gli oggetti prima di riaggingerli
for (int i=0; i<=39; i++) {     // riaggiungo gli oggetti
   gioco.add(c[i]);     // c[] è il mio array di carte
}
repaint();   // ridisegno la nuova versione del pannello
Spero solo che non ti dia problemi la lentezza del tuo computer.
P.S.           Fammi sapere come è andata.
                                  Ciao .
                                      Cristiano 
cristi...@iol.it

P.S.           Fammi sapere come è andata.
Ho provato ad utilizzare solo il metodo repaint().
Quando ci sono piu' pannelli annidati, repaint() non sempre riesce a farli
visualizzare tutti correttamente, dipende dalla macchina virtuale.
Su alcuni pannelli devo dare anche il metodo validate()
La velocita' di visualizzazione resta sempre bassa.
Puo' darsi che Java sia un ambiente troppo "pesante" per la mia macchina.
C'e' anche un problema di cattiva gestione della memoria da parte di alcuni
programmi. IE4 ad esempio, con la macchina appena resettata riesce a far girare
la mia applet piuttosto velocemente. Dopo un po' di prove le prestazioni
diventano lentissime e sono costretto a resettare l'hw   :-(


>diventano lentissime e sono costretto a resettare l'hw   :-(
Non è che per caso occupi molta memoria senza liberarla oppure anche se la
liberi non parte la garbage collection?
Nel caso leggiti il mio Re:immagini e memoria .
                              Ciao
                                  Cristiano 
cristi...@iol.it

Nel caso leggiti il mio Re:immagini e memoria .
Ho letto il tuo post ed ho provato ad inserire nella routine di stop dell'applet
le istruzioni :
Runtime r = Runtime.getRuntime();
System.out.println("Total memory is: " + r.totalMemory());
System.out.println("Initial free memory : " + r.freeMemory());
r.gc();
System.out.println("Free memory after garbage collection: " + r.freeMemory());
Il risultato di una prova e' il seguente :
Total memory is: 1079856
Initial free memory : 80296
Free memory after garbage collection: 130928
Un po' di memoria viene liberata. Quello che mi stupisce e' la quantita' ridotta
di memoria totale disponibile per la JVM
I risultati dell'applet viewer del JDK 1.1.6 e di IE4 sono simili


 vecchio e poi fare riapparire la nuova schermata all'interno dello ScrollPane
Non so se ho capito benissimo ma, se le combinazioni di bottoni, text box ed
immagini sono poche (3,4,5...) puoi utilizzare il CardLayout, che ti fa visualizzare
un pannello alla volta.
Ciao !

un pannello alla volta
Non ho mai fatto esperimenti con il CardLayout. E' facile da utilizzare ?
Riesce a disporre i componenti senza doverli prima visualizzare ?
Le combinazioni sono poche, pero' le dimensioni delle immagini le so solo
durante il caricamento ed il pannello va ridimensionato di conseguenza.
Per il momento ho risolto parzialmente inserendo le immagini all'interno di
nuove finestre


 nuove finestre
Ciao,
neanche io ho usato il CardLayout (ho solo letto la documentazione nel sito JavaSoft);
comunque, se ti interessa, posso vedere se risponde alle tue esigenze (piů che altro
avrei dei dubbi sul ridimensionamento della finestra, se non hai limiti massimi).
Fammi sapere. A presto.
Massimo

avrei dei dubbi sul ridimensionamento della finestra, se non hai limiti massimi).
Ti ringrazio per l'interessamento. L'applet che sto sviluppando serve per
inserire questionari all'interno di pagine web.
Un demo della versione attuale lo puoi vedere online all'indirizzo
http://www.eurolink.it/scuola/didaweb/materiali/dwsup-inftel/provatest/test.html
Per il momento non sono riuscito a fare meglio. Per vedere l'applet in funzione
hai bisogno di un Browser compatibile con Java 1.1
Ultimo dei problemi che ho incontrato e' il mancato funzionamento del metodo
java.awt.Frame.toFront() con IE4. Per adesso sono costretto a ricreare un Frame
nuovo per poter riuscire a mettere una immagine in primo piano
I sorgenti Java con il relativo manuale ed esempi da guardare offline li trovi
nel file
http://www.eurolink.it/scuola/didaweb/materiali/dwsup-inftel/informatica/jft00a1.zip
sono meno di 150K
