2011-05-20 2 views
0

J'ai une boucle ajouter des champs à un gestionnaire, j'essaie de retarder le temps entre le moment où chaque champ est peint sur l'écran. J'ai essayé ci-dessous le code mais il peint juste le directeur quand tous les champs ont été ajoutés à lui. Est-ce possible?retard affichage des champs dans le gestionnaire (blackberry)

manager.add(field); 
manager.invalidate();//force a repaint of the manager 
Thread.sleep(1000); 

Merci

Répondre

2

Invalider ne force pas nécessairement une peinture, il dit simplement que la prochaine peinture du terrain (ou le gestionnaire dans votre cas) doit être redessinée. C'est une différence subtile, mais cela pourrait causer la confusion. Ce que vous pourriez vouloir essayer appelle Screen.doPaint(), ce qui forcera l'écran entier à redessiner. De plus, mettre sleep() dans votre Event Thread n'aidera pas, car la peinture est également faite sur le même Thread.

Si vous tentez d'ajouter séquentiellement des champs à votre gestionnaire avec ce second délai, vous devez mettre cette logique dans son propre thread et faire synchronized(UiApplication.getEventLock()){//add fields} lorsque vous appelez manager.add (champ). Ensuite, vous pouvez appeler votre Thread.sleep(1000) pour afficher correctement le délai d'affichage. En outre, tout comme une certaine information supplémentaire, appelant add() provoque en soi un invalidate() appel, de sorte que vous n'avez pas besoin de l'ajouter. Voici un exemple simple du second retard à ajouter

protected void addDelayedFields() { 
    Thread t = new Thread(new Runnable() { 
     public void run() { 
      for(int i=0;i<SOME_LIMIT;i++) { 
       synchronized(UiApplication.getEventLock()) { 
        manager.add(new LabelField(i.toString()); 
       } 
       try{ 
        Thread.sleep(1000); 
       } 
       catch(Exception e){ } 
      } 
     } 
    }); 
    t.start(); 
} 

Le tableau devrait se produire après l'ajout(), mais si elle ne le fait pas, vous pouvez également faire un appel à yourScreen.doPaint()

+0

Merci pour la grande réponse. Pourquoi vous synchronisez ici - synchronisé (UiApplication.getEventLock()) { ? –

+0

Parce que vous devez, pour ajouter des champs à un gestionnaire. – Swati

Questions connexes