2009-04-12 3 views
2

Je suis un Noob total dans SWT, je commence juste, mais j'ai déjà travaillé avec des frameworks GUI tels que Swing.Comment forcer redessiner le contenu d'un ancien groupe invisible dans SWT?

J'ai un composite qui contient un groupe et un bouton. Le groupe est initialement défini sur invisible (à l'aide de group.setVisible (false)) et est défini sur visible lorsque vous cliquez sur le bouton. Cela démarre un thread qui effectue des calculs, mettant à jour une étiquette dans le groupe avec la progression (une sorte de barre de progression manuelle, c'est ce que le client veut :)). Quoi qu'il en soit, pour une raison quelconque, le groupe apparaît seulement après que le thread a fini de tourner, et je n'arrive pas à le faire apparaître, peu importe ce que j'ai utilisé (essayé d'appeler this.pack(), this. layout(), this.getShell(). layout(), redraw() sur une variété de contrôles dans le chemin - rien).

Voici comment je crée le groupe:

statusGroup = new Group(this, SWT.SHADOW_NONE); 
statusGroup.setLayout(null); 
statusGroup.setVisible(false); 
percentCompleteLabel = new Label(statusGroup, SWT.NONE); 
percentCompleteLabel.setText("0% complete"); 

Voilà comment je mettre à jour à partir du SelectionListener du bouton:

this.statusGroup.setVisible(true); 
this.statusGroup.pack(true); 
this.statusGroup.layout(); 


this.getShell().layout(); 

myThreadStartupCode(); // psuedo 

while (!workIsDone) // psuedo 
{ 
    final int progress = myProgressCalcMethod(); // psuedo 

    percentCompleteLabel.setText(progress + "% complete"); 
    percentCompleteLabel.pack(true); 

    this.layout(); 
    this.redraw(); 

    Thread.sleep(100); 
} 

Un indice serait apprécié.

Répondre

1

Apparemment, la solution est d'utiliser Display.getCurrent().update();

Questions connexes