2009-11-17 5 views
0

J'ai créé un widget composite personnalisé, qui écoute un événement (dans mon cas loginEvent). Une fois l'événement détecté, l'état du widget change de la façon dont il devrait apparaître (dans mon cas, je souhaiterais remplacer l'une des icônes par un signal indiquant que l'utilisateur est connecté).Actualiser l'interface utilisateur en gwt

Cependant, après que l'événement a été détecté, puis-je faire en sorte que le widget se dessine à nouveau selon le nouvel état?

Je suis assez nouveau pour GWT alors soyez gentil et élaborer s'il vous plaît ...

Répondre

1

Il y a plusieurs façons de le faire. Cet exemple montre comment afficher Connexion/Déconnexion et basculer la visibilité lorsqu'un événement connecté est déclenché.

public class LoginLogoutWidget extends Compostite { 
    private final Anchor m_loginLink; 
    private final Anchor m_logoutLink; 

    public LoginLogoutWidget() { 

     m_loginLink = new Anchor("Login"); 
     //Register event handlers etc 

     m_logoutLink = new Anchor("Logout"); 
     //Register event handlers etc 

     HorizontalPanel hp = new HorizontalPanel(); 

     hp.add(m_loginLink); 
     hp.add(m_logoutLink); 

     initWidget(hp); 

     //Default login visible, and logout invisible 
     m_logoutLink.setVisible(false); 
    } 

    public void onLoginEvent(boolean loggedIn) {   
     m_loginLink.setVisible(!loggedIn); 
     m_logoutLink.setVisible(loggedIn); 
    } 
} 
-3

Si vous avez quelque chose comme ceci:

HorizontalPanel panel = new HorizontalPanel(); 
Image oldImage = new Image("url to old img"); 
panel.add(oldImage); 

alors vous devriez être en mesure de faire quelque chose comme ceci:

panel.remove(oldImage); 
Image newImage = new Image("url to new img"); 
panel.add(newImage); 

panel.layout(); 

J'ai constaté que, dans certains cas, si je n'appelez pas la méthode "layout()" sur le conteneur parent, les éléments que j'ai ajoutés par programmation n'apparaissent pas à l'écran comme je le souhaite.

Espérons que ça aide!

+0

panel.layout() - Cela ressemble à GXT, pas GWT de base pour moi .... Non, les choses ne fonctionnent pas comme vous attendez avec GXT puisque pour diverses raisons, les changements ne sont pas appliqués instantanément au DOM, contrairement à GWT normal. Cela conduit à toutes sortes d'appels excessifs à .layout() et des méthodes similaires. Au moins, c'était dans notre code avant que nous commencions à nous éloigner de cette bibliothèque. Sidetrack terminé, sinon de bons points. – bikesandcode