Newsgroup: it.comp.java
Titolo: Panel con CheckboxGroup con aggiornamento visualizzazione Component non corretta: perchè?

Ho una serie di CheckboxGroup in un Panel ai quali sono associate istanze di
un ItemListener, che si occupa (tra l'altro) di richiamare il metodo della
classe principale che rimuove tutti i Component inseriti, per riaggiungerli
aggiornati.
O almeno così dovrebbe essere, visto che alcuni Component vengono 
visualizzati esattamente come prima (mentre dovrebbe cambiare il colore), 
nonostante le variabili relative vengano correttamente settate (cliccando su 
Button esterni al Panel che ne aggiornano a loro volta la visualizzazione i 
colori sono corretti). Inoltre i CheckBox finiscono in posizione errata e 
senza
scritte. Siccome il codice è lungo, riporto solo i passi salienti.
Qualcuno sa dirmi dove sbaglio? Forse removeAll non toglie correttamente 
Checkbox o CheckboxGroup dal Panel? Una procedura identica con Button e 
ActionListener funziona correttamente...
Riepilogo:
1) il metodo "contenuto" della classe "pannello" esegue removeAll() e
reinserisce Canvas, CheckboxGroup e Checkbox.
2) il metodo "itemStateChanged" della classe "scelta", interna alla classe
"pannello" modifica variabili come necessario e richiama il metodo
"contenuto" della classe principale.
N.B. Se inserisco removeAll() al posto di contenuto(parametri) 
nell'itemStateChanged il Panel diventa, come è giusto, completamente bianco.
public class pannello extends Panel
 {
   private pannello Pannello;
//variabili
...
  public void contenuto(parametri)
   {
    removeAll();
//inizializzazione
...
    for (int i=0;i<20;i++)
     {
//definisce e aggiunge un Component c per ogni i (istanze di varie classi
che estendono Canvas)
...
        c.setSize(dimx,dimy);
        c.setLocation(0,totaley);
        CheckboxGroup gruppo = new CheckboxGroup();
        Checkbox si=new Checkbox("Sì",true,gruppo);
        si.setSize(20,dimy);
        si.setLocation(dimx,totaley);
        singolo.checkbox=si;
//memorizza Chechbox come proprietà di un'istanza di un'altra classe per
recuperarlo nell'itemStateChanged
        Checkbox no=new Checkbox("No",false,gruppo);
        no.setSize(20,dimy);
        no.setLocation(dimx+20,totaley);
        add (si);
        add (no);
        scelta s0=new scelta();
        s0.qualenumero(i);
        si.addItemListener(s0);
        no.addItemListener(s0);
        totaley=totaley+dimy+5;
      }
   }
//costruttore
  public pannello()
   {
    super();
    setBackground(Color.white);
   }
//sottoclasse
    class scelta implements java.awt.event.ItemListener
     {
      private int numero;
      public void qualenumero(int n)
       {numero=n;}
//memorizza numero per capire quale CheckBox è stato cliccato
      public void itemStateChanged(java.awt.event.ItemEvent event)
       {
//recupera da Vector CheckBox cliccato
...
        boolean daaccettare=singolo.checkbox.getState();
//setta variabile per memorizzare scelta
        contenuto(parametri);
//questo dovrebbe rimuovere dal pannello tutti i Component inseriti, e
riinserirli aggiornati, ma non funziona correttamente
       }
     }
   }

Aggiungo che modificando col mouse le dimensioni della finestra ritorna 
tutto a posto, come se fosse solo un problema di refresh del Panel. Ho 
provato con un repaint alla fine, ma non cambia nulla... 


Invocare in successione validate() e repaint() ?
Saluti
CarMas


Funziona, grazie! Cosa fa esattamente validate()? 

 Funziona, grazie! Cosa fa esattamente validate()? 
E' un metodo di Container e, come dicono le api:
The validate method is used to cause a container to lay out its 
subcomponents again. It should be invoked when this container's 
subcomponents are modified (added to or removed from the container, or 
layout-related information changed) after the container has been displayed.
Saluti
CarMas