SmartGWT:单击Canvas的子元素时处理鼠标

时间:2012-12-13 07:34:35

标签: smartgwt

我有一个添加了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。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分: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方法。您必须为此抽象类创建一个实现,并将其用于Canvas和TextArea小部件。