如何获取tapped List项的List索引?

时间:2015-03-27 15:45:22

标签: java html gwt mgwt

我有一个GWT三个FlowPanel列表,其中包含ui binder中的两个按钮:

<g:FlowPanel>

  <g:FlowPanel>
     <g:FocusPanel ui:field="buttonA1">...</g:FocusPanel>
     <g:FocusPanel ui:field="buttonB1">...</g:FocusPanel>
  </g:FlowPanel>

  <g:FlowPanel>
     <g:FocusPanel ui:field="buttonA2">...</g:FocusPanel>
     <g:FocusPanel ui:field="buttonB2">...</g:FocusPanel>
  </g:FlowPanel>

  <g:FlowPanel>
     <g:FocusPanel ui:field="buttonA3">...</g:FocusPanel>
     <g:FocusPanel ui:field="buttonB3">...</g:FocusPanel>
  </g:FlowPanel>

</g:FlowPanel>

ButtonA1,ButtonA2,ButtonA3共享一个ClickHandler。 ButtonB1,ButtonB2,ButtonB3共享一个ClickHandler。

这里是A按钮的ClickHandler:

ClickHandler clickA = new ClickHandler() {

  @Override
  public void onClick(ClickEvent event) {

  }
});

如果单击其中一个按钮A或B,我如何知道单击处理程序中哪三个FlowPanel组受影响?

2 个答案:

答案 0 :(得分:0)

您可以评估事件来源。如果您将点击处理程序添加到那些按钮,那应该是按钮。

按钮有一个名称,按钮elementId也可以被评估,最后但并非最不重要的是,源是按钮本身,因为你在按钮中添加了字段,你可以在按钮之间询问身份

if( ev.getSource() instanceof Button) {
    if(buttonA == (Button)ev.getSource()) ...;
...

另一个常见的模式是避免按下什么按钮进行讨论,并为每个按钮提供一个点击处理程序。

@UiHandler("buttonA")
protected void onButtonA(ClickEvent ev) {
    ....

@UiHandler("buttonB")
protected void onButtonB(ClickEvent ev) {
    ....

如果动态创建按钮,则可以动态添加处理程序:

buttonA.addClickHandler( new ClickEventHandler() { ... 
    implement the interface in place

答案 1 :(得分:0)

在按钮之间共享ui处理程序并确定父窗口小部件

  

//共享按钮之间的点击处理程序

     

@UiHandler({&#34; buttonA1&#34;&#34; buttonA2&#34;&#34; buttonA3&#34;})
        void onClick(ClickEvent e)        {
              //确定单击了哪个按钮

     

Window.alert(((按钮)e.getSource())的getText());

 //determine the parent widget
 Widget w=(Button)e.getSource()).getParent();     
  }