2010-12-02 46 views

Répondre

0

Voici un exemple pour intercepter un événement ClickEvent sur le cloud. Mais ceci est une solution de contournement car la bibliothèque peut changer. Comme le développeur ne propose pas de gérer les événements sur le cloud ni sur les tags, c'est peut-être pour une bonne raison ...

Alors utilisez ce code à vos risques et périls. Prier pour ne pas changer la structure du widget DOM. Je vous suggère de demander au développeur quelques améliorations sur ses widgets, comme la gestion de tels événements.

final TagCloud cloud = new TagCloud(); 

    cloud.addWord(new WordTag("AAA")); 
    cloud.addWord(new WordTag("AAA")); 
    cloud.addWord(new WordTag("BBB")); 
    cloud.addWord(new WordTag("CCC")); 
    cloud.addWord(new WordTag("CCC")); 
    cloud.addWord(new WordTag("CCC")); 

    cloud.addDomHandler(new ClickHandler() { 
     @Override 
     public void onClick(ClickEvent event) { 
      // Prevent the click from the tag to be executed 
      event.preventDefault(); 

      Element e; 
      // For each tag present in the cloud, look for the one that is triggered 
      for (int i = 0; i < cloud.getTags().size(); ++i) { 
       // Gets the element in the cloud, this really is the unsafe part of the code 
       // if the developer change the dom of its widget 
       e = DOM.getChild(DOM.getChild(cloud.getElement(), 0), i); 
       // Is the current element targeted by the event? 
       if (event.getClientX() >= e.getOffsetLeft() && event.getClientY() >= e.getOffsetTop() 
         && event.getClientX() <= e.getOffsetLeft() + e.getOffsetWidth() 
         && event.getClientY() <= e.getOffsetTop() + e.getOffsetHeight()) { 
        // Gets the abstract tag 
        Tag t = cloud.getTags().get(i); 
        // Gets tag descendant 
        if (t instanceof WordTag) { 
         // Do what you want with your WordTag, maybe an RPC call 
        } else if (t instanceof ImageTag) { 
         // Do what you want with your ImageTag, maybe an RPC call 
        } 

        break; 
       } 
      } 
     } 
    }, ClickEvent.getType());