如何为不同的按钮设置C​​lickhandler?

时间:2011-12-06 21:14:38

标签: gwt onclick

我正在使用gwt并想创建自己的onClickHandler。 在谷歌文档中,我找到了一个很好的例子:

public class HandlerExample extends Composite implements ClickHandler {
  private FlowPanel fp = new FlowPanel();
  private Button b1 = new Button("Button 1");
  private Button b2 = new Button("Button 2");

  public HandlerExample() {
    initWidget(fp);
    fp.add(b1);
    fp.add(b2);
    b1.addClickHandler(this);
    b2.addClickHandler(this);
  }

  public void onClick(ClickEvent event) {
    // note that in general, events can have sources that are not Widgets.
    Widget sender = (Widget) event.getSource();

    if (sender == b1) {
      // handle b1 being clicked
    } else if (sender == b2) {
     // handle b2 being clicked
   }
  }
}

但是在我的项目中,clickhandler方法不在按钮的文件中。有没有办法用一个处理程序处理具有不同功能的按钮?

格尔茨

2 个答案:

答案 0 :(得分:0)

实施HasClickHandlers。然后,您可以在窗口小部件代码外部设置ClickHanlder的实现。

您是否需要为不同的按钮设置不同的ClickHandler?如果是这样,那么也许您可以使用public / protected方法为每个按钮设置ClickHandler

答案 1 :(得分:0)

您可以这样做:

public class HandlerExample extends Composite {
  private FlowPanel fp = new FlowPanel();
  private Button b1 = new Button("Button 1");
  private Button b2 = new Button("Button 2");

  public HandlerExample() {
    initWidget(fp);
    fp.add(b1);
    fp.add(b2);
  }

  public List< HandlerRegistration > addClickHandlerToAllButtons( ClickHandler handler ) {
    List< HandlerRegistration > handlerRegistrations = new ArrayList< HandlerRegistration >();
    handlerRegistrations.add( b1.addClickHandler( handler ) );
    handlerRegistrations.add( b2.addClickHandler( handler ) );

    return handlerRegistrations;
  }
}