如何从"事件"对象获取有此事件的对象?

Gle*_*iko 5 java events gwt

我正在使用UIBinder在GWT上开发一个应用程序,我遇到了问题.在我的用户界面中可以有很多相同的元素(例如小部件).所有元素都必须具有捕获鼠标单击事件的处理程序.我想编写一个通用处理程序,它将能够识别导致事件并处理它的窗口小部件.现在我为每个对象都有一个小部件来描述同一个处理程序.我怎么解决这个问题?

Ste*_*fan 7

您必须将源对象强制转换为您期望的对象.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)

如果您不知道元素的类型,或者事件绑定到多个元素,则必须先检查所有可能的类型,然后执行正确的操作.