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 小部件。我建议您使用从 smartgwt 添加到 DynamicForm 的 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 方法。您必须为这个抽象类创建一个实现,并将其用于 Canvas 和 TextArea 小部件。

于 2012-12-13T09:47:59.063 回答