在学习和使用gwt过程中,会使用到大量的事件处理,是利用各个组件的监听器来完成的,很方便。但是有些情况我们需要自己定义一个事件,用来创建监听器。就像下面例子中的,当点击删除时,在另一个类中创建了一个对话框,当点击确认之后要把此事件告送给当前类,那么就需要在当前类里面创建监听器来实现.例子:
点击确认:
实现代码:
1、创建删除事件
。。。
public class DeleEvent extends GwtEvent<DeleEventHander> {
public static Type<DeleEventHander> TYPE = new Type<DeleEventHander>();
private boolean is_Del_Success;
public DeleEvent(boolean is_Del_Success) {
this.is_Del_Success = is_Del_Success;
}
@Override
protected void dispatch(DeleEventHander deleEventHander) {
if (is_Del_Success) {
deleEventHander.deleSuccess();
} else {
deleEventHander.deleFail();
}
}
@Override
public com.google.gwt.event.shared.GwtEvent.Type<DeleEventHander> getAssociatedType() {
return TYPE;
}
}
。。。
2、创建删除事件的监听器
…
public interface DeleEventHander extends EventHandler{
void deleSuccess();
void deleFail();
}
…
3、创建删除对话框
…
public class DeleTools {
private HandlerManager handlerManager;
private DialogBox dialogBox;
public DeleTools()
{
dialogBox = new DialogBox();
dialogBox.setText("确实要删除吗?");
HorizontalPanel horizontalPanel = new HorizontalPanel();
Button button = new Button("确认");
Button button2 = new Button("取消");
horizontalPanel.add(button);
horizontalPanel.add(button2);
dialogBox.add(horizontalPanel);
dialogBox.setGlassEnabled(true);
dialogBox.center();
handlerManager=new HandlerManager(dialogBox);
button.addClickHandler(new ClickHandler() {
//确定删除
@Override
public void onClick(ClickEvent clickEvent) {
handlerManager.fireEvent(new DeleEvent(true));
dialogBox.hide();
dialogBox.clear();
dialogBox.removeFromParent();
}
});
button2.addClickHandler(new ClickHandler() {
//取消删除
@Override
public void onClick(ClickEvent clickEvent) {
handlerManager.fireEvent(new DeleEvent(false));
dialogBox.hide();
dialogBox.clear();
dialogBox.removeFromParent();
}
});
}
/**
* @return the handlerManager
*/
public HandlerManager getHandlerManager() {
return handlerManager;
}
}
…
4、创建根目录
…
public class Gwt_event implements EntryPoint {
public void onModuleLoad() {
final FlexTable flexTable=new FlexTable();
flexTable.setWidth("100%");
flexTable.setBorderWidth(1);
init(flexTable);
RootPanel.get("nameFieldContainer").add(flexTable);
}
public void init(final FlexTable flexTable)
{
flexTable.clear();
flexTable.setText(0, 0, "用户名");
flexTable.setText(0, 1, "密码");
flexTable.setText(0, 2, "删除");
for(int i=0;i<9;)
{
i++;
flexTable.setText(i, 0, "username"+i);
flexTable.setText(i, 1, "password"+i);
Anchor anchor=new Anchor("删除");
anchor.setName(i+"");
flexTable.setWidget(i, 2, anchor);
anchor.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
final Anchor anchor=(Anchor)event.getSource();
DeleTools deleTools=new DeleTools();
deleTools.getHandlerManager().addHandler(DeleEvent.TYPE, new DeleEventHander() {
@Override
public void deleSuccess() {
flexTable.removeRow(Integer.parseInt(anchor.getName())-1);
}
@Override
public void deleFail() {
}
});
}
});
}
}
}
…
源代码:http://wangjun-memory.googlecode.com/svn/trunk/gwt_event/