2009-05-06 6 views
4

Ceci est probablement une chose très simple, mais je ne sais pas comment implémenter ce qui suit. Je veux avoir ce qui est effectivement un absolutePanel qui peut accepter les événements de la souris. Cependant, dans l'objet Composite, je ne sais pas comment lier le gestionnaire que j'ai écrit (la chose onMouseDown()) avec la variable abs. Pour le dire succinctement, je veux que l'ABS AbsolutePanel réponde quand on clique dessus, mais AbsolutePanels n'accepte pas naturellement les événements de clic. Comment vais-je faire cela? Excuse à l'avance si c'est stupide simple, mais je ne sais pas comment implémenter ce comportement, et je ne l'ai pas vu mentionné dans les recherches que j'ai faites.Comment ajouter des gestionnaires d'événements à des panneaux composites dans GWT 1.6

Répondre

5

Dans ce cas, l'extension du Composite n'est probablement pas la meilleure idée sauf si vous bloquez délibérément l'accès à l'AbsolutePanel que vous créez dans le constructeur. Si vous étendez le AbsolutePanel vous serez en mesure de réutiliser le code pour ajouter/supprimer des widgets etc ..

Voilà comment je vous recommande de le faire:

package mods.client.resultSelector; 

import com.google.gwt.event.dom.client.MouseDownEvent; 
import com.google.gwt.event.dom.client.MouseDownHandler; 
import com.google.gwt.event.dom.client.HasMouseDownHandlers; 
import com.google.gwt.user.client.ui.AbsolutePanel; 


public class MousyAbsolutePanel extends AbsolutePanel implements 
         MouseDownHandler,HasMouseDownHandlers { 

    public MousyAbsolutePanel(int width) { 
     System.out.println("MousyAbsolutePanel being created with width:" + width); 

     this.setWidth(String.valueOf(width)); 
     this.setHeight("100%"); 
     this.setStyleName("mousyAbsolutePanel"); 

     this.addMouseDownHandler(this); 
    } 

    /** 
    * MouseDownHandler 
    */ 
    public void onMouseDown(MouseDownEvent event) { 
     System.out.println("onMouseDown()"); 
    } 

    /** 
    * HasMouseDownHandlers - Code to add handlers to the panel 
    */ 
    public HandlerRegistration addMouseDownHandler(MouseDownHandler handler) { 
     return addDomHandler(handler, MouseDownEvent.getType()); 
    } 

} 

Ensuite, vous pouvez accéder à la même MousyAbsolutePanel façon dont vous accédez à un AbsolutePanel, mais avec les gestionnaires d'événements supplémentaires, le style etc ..

0

La meilleure chose à faire pour apprendre comment/quoi faire est de regarder un exemple. Par exemple, la classe FocusWidget (qui implémente HasClickHandlers).

Plus précisément, regardez la méthode addClickHandler() et tracez-la.

0

Une fois que vous appelez initWidget(Widget), Composite correctement proxy l'enregistrement de l'événement. Donc, vous pouvez simplement appeler MousyAbsolutePanel hérité addDomHandler(...).

Questions connexes