我有一个添加了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。
提前感谢您的帮助。
答案 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小部件。