2009-05-06 8 views
4

これはおそらく本当に簡単なことですが、次の実装方法はわかりません。GWT 1.6のコンポジットパネルにイベントハンドラを追加する方法

package mods.client.resultSelector; 

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

public class MousyAbsolutePanel extends Composite implements MouseDownHandler { 

    AbsolutePanel abs = new AbsolutePanel(); 

    public MousyAbsolutePanel(int width){ 
     System.out.println("MousyAbsolutePanel being created with width:" + width); 
     initWidget(abs); 
     abs.setWidth(String.valueOf(width)); 
     abs.setHeight("100%"); 
     abs.setStyleName("mousyAbsolutePanel"); 
    } 

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

} 

私は効果的にマウスイベントを受け入れることができるものを持ちたいと思っています。しかし、Compositeオブジェクト内では、私が書いたハンドラ(onMouseDown()のこと)をabs変数と結ぶ方法はわかりません。簡単に言えば、AbsolutePanelがクリックされたときにAbsolutePanelが応答するようにしたいが、AbsolutePanelは当然クリックイベントを受け入れない。これをどうやって行うのですか?

これは単純な愚かな場合は事前に謝罪しますが、この動作を実装する方法はあまりよく分かりません。

答えて

5

この場合、Compositeを拡張することは、コンストラクタで作成したAbsolutePanelへのアクセスを意図的にブロックしない限り、おそらく最良の方法ではありません。あなたがAbsolutePanelを拡張する場合は、ウィジェットなどを追加/削除するためのコードを再利用することができるでしょう。..

は、ここで私はあなたがそれを行うお勧めします方法は次のとおりです。

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

} 

次にあなたがMousyAbsolutePanelを同じにアクセスすることができますあなたはAbsolutePanelにアクセスしますが、イベントハンドラ、スタイルなどを追加します。

0

どのように/何をするのが良いかは、例を見ることです。例えば、FocusWidgetクラス(HasClickHandlersを実装する)。

具体的には、addClickHandler()メソッドを見て、それをトレースします。

0

initWidget(Widget)に電話すると、Compositeは正しくイベント登録を代行します。したがって、MousyAbsolutePanelの継承されたaddDomHandler(...)を呼び出すことができます。ここで

関連する問題