我正在使用UIBinder在GWT上开发一个应用程序,我遇到了问题.在我的用户界面中可以有很多相同的元素(例如小部件).所有元素都必须具有捕获鼠标单击事件的处理程序.我想编写一个通用处理程序,它将能够识别导致事件并处理它的窗口小部件.现在我为每个对象都有一个小部件来描述同一个处理程序.我怎么解决这个问题?
您必须将源对象强制转换为您期望的对象.getSource()方法只为您提供一个对象,但您无法从中访问任何信息(例如,从Button,您首先必须将其转换为按钮).
这是一个例子:
Button bt = new Button("click");
bt.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Object soruce = event.getSource();
if (soruce instanceof Button) { //check that the source is really a button
String buttonText = ((Button) soruce).getText(); //cast the source to a button
RootPanel.get().add(new Label(buttonText));
} else {
RootPanel.get().add(new Label("Not a Button, can't be..."));
}
}
});
RootPanel.get().add(bt);
Run Code Online (Sandbox Code Playgroud)
这当然也适用于UiBinder按钮:
@UiHandler("button")
void onClick(ClickEvent e) {
Object soruce = e.getSource();
if(soruce instanceof Button){
String buttonText = ((Button)soruce).getText();
RootPanel.get().add(new Label(buttonText));
}
else {
RootPanel.get().add(new Label("The event is not bound to a button"));
}
}
Run Code Online (Sandbox Code Playgroud)
如果您不知道元素的类型,或者事件绑定到多个元素,则必须先检查所有可能的类型,然后执行正确的操作.
| 归档时间: |
|
| 查看次数: |
13494 次 |
| 最近记录: |