2009-05-06 7 views
4

Dies ist wahrscheinlich eine sehr einfache Sache, aber ich weiß nicht, wie Sie das Folgende implementieren.Wie Hinzufügen von Ereignishandlern zu Verbundplatten in GWT 1.6

Ich möchte, was ist eigentlich ein AbsolutePanel, das Mausereignisse akzeptieren kann. Innerhalb des Composite-Objekts weiß ich jedoch nicht, wie ich den Handler, den ich geschrieben habe (die Sache onMouseDown()), mit der Variable abs verknüpfen soll. Um es kurz zu machen, ich möchte, dass die ABS AbsolutePanel reagiert, wenn darauf geklickt wird, aber AbsolutePanels akzeptieren Click-Events nicht auf natürliche Weise. Wie gehe ich dabei vor?

Entschuldigung im Voraus, wenn das dumm ist einfach, aber ich weiß einfach nicht, wie dieses Verhalten zu implementieren, und ich habe es nicht erwähnt in den Suchen, die ich getan habe.

Antwort

5

In diesem Fall ist die Erweiterung des Composite wahrscheinlich nicht die beste Idee, es sei denn, Sie blockieren absichtlich den Zugriff auf das AbsolutePanel, das Sie im Konstruktor erstellen. Wenn Sie die AbsolutePanel erweitern Sie in der Lage sein, den Code wiederverwenden zum Hinzufügen/Entfernen Widgets etc ..

Hier ist, wie ich würde empfehlen Sie es tun:

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()); 
    } 

} 

Dann können Sie MousyAbsolutePanel greifen auf die gleichen So können Sie auf ein AbsolutePanel zugreifen, aber mit den zusätzlichen Event-Handlern, Stil usw.

0

Das Beste, was zu tun ist, ist ein Beispiel zu sehen. Zum Beispiel die FocusWidget-Klasse (die HasClickHandlers implementiert).

Schauen Sie sich speziell die addClickHandler() -Methode an und ziehen Sie sie durch.

0

Sobald Sie initWidget(Widget) anrufen, Composite wird die Ereignisregistrierung korrekt Proxy. Sie können also einfach MousyAbsolutePanel 's geerbt addDomHandler(...) anrufen.

Verwandte Themen