1

TextArea が追加された smartgwt Canvas があります。ユーザーがキャンバス上の任意の場所をクリックしたときに、 MouseDown イベントを処理し、その境界線を変更したいと考えています。私のコードは次のようになります。

final com.smartgwt.client.widgets.Canvas can = new com.smartgwt.client.widgets.Canvas();
can.setCanFocus(true);
can.setBorder("2px Solid Blue");
can.setCanDragResize(true);
TextArea ta = new TextArea();
can.addChild(ta);
can.addMouseDownHandler(new MouseDownHandler() {

            @Override
            public void onMouseDown(MouseDownEvent event) {

                ChangeCanvasBorder(can);

            }
        });

Canvas に含まれる TextArea をクリックしても、MouseDown イベントが発生しません。キャンバスの子要素のクリックを処理する方法はありますか?

私はgwtが初めてです。いくつかの設定を見逃している可能性があります。

別の方法として、gwt の FocusPanel を試してみましたが、FocusPanel に追加された TextArea がクリックされたときに MouseDown を受け取ることができます。

smartgwt 2.4 と gwt 2.4 を使用しています。

よろしくお願いします。

4

1 に答える 1

1

ZalewaPLが言ったように、gwtウィジェットとsmartgwtウィジェットを混在させない方がよいでしょう。DynamicFormに追加されたsmartgwtのTextAreaItemを使用することをお勧めします。簡単な例を次に示します。

final Canvas can = new Canvas();
can.setCanFocus(true);
can.setBorder("2px Solid Blue");
can.setCanDragResize(true);
DynamicForm form = new DynamicForm();
TextAreaItem tai = new TextAreaItem("textarea");
form.setFields(tai);
can.addChild(form);
can.addMouseDownHandler(new MouseDownHandler() {

    @Override
    public void onMouseDown(MouseDownEvent event) {
        changeCanvasBorder(can);
    }
});

ただし、gwtのTextAreaウィジェットを引き続き使用する場合は、次のように実行できます。

abstract class CustomMouseDownHandler implements com.smartgwt.client.widgets.events.MouseDownHandler, com.google.gwt.event.dom.client.MouseDownHandler {
    @Override
    public void onMouseDown(com.smartgwt.client.widgets.events.MouseDownEvent event) {
        onMouseDown();
    }

    @Override
    public void onMouseDown(com.google.gwt.event.dom.client.MouseDownEvent event) {
        onMouseDown();
    }

    public abstract void onMouseDown();
}

final Canvas can = new Canvas();
can.setCanFocus(true);
can.setBorder("2px Solid Blue");
can.setCanDragResize(true);
TextArea ta = new TextArea();
CustomMouseDownHandler mdh = new CustomMouseDownHandler() {

    @Override
    public void onMouseDown() {
        changeCanvasBorder(can);
    }
};
ta.addMouseDownHandler(mdh);
can.addChild(ta);
can.addMouseDownHandler(mdh);

これは、両方のMouseDownHandlerインターフェースを実装し、それらのonMouseDownメソッドを新しいonMouseDownメソッドに転送する新しいハンドラー抽象クラスを作成します。この抽象クラスの実装を1つ作成し、それをCanvasおよびTextAreaウィジェットにも使用する必要があります。

于 2012-12-13T09:47:59.063 に答える