有没有一种方法可以使用 GWT 跟踪单击了哪个元素?

Is there a way to track which element was clicked using GWT?

我是 GWT 世界的新手,之前我使用 JavaScript。我有一些网页,其中有多个元素。我需要使用 GWT 跟踪单击了哪个元素。

我正在使用 GWT 2.8.1

<div class="FileRow">
  <a href="http://l24-n52:/admin/downloadresource=f&amp;table=R_Document&amp;id=405&amp;filename=1000x700.jpg" target="blank" class="fileLink jpg" tabindex="1" id="jpg1"></a>
</div>
<div class="FileRow">
  <a href="http://l24-  n52:/admin/downloadresource=f&amp;table=R_Document&amp;id=405&amp;filename=1000x700.jpg" target="blank" class="fileLink jpg" tabindex="2" id="jpg2"></a>
</div>
<div class="FileRow">
  <a href="http://l24-  n52:/admin/downloadresource=f&amp;table=R_Document&amp;id=405&amp;filename=1000x700.jpg" target="blank" class="fileLink pdf" tabindex="3" id="pdf"></a>
</div>

GWT realization

    Integer tabIndex = 1, count = 1;
    
    for (final FieldFileInfo info : clientData.getFileInfo()) {
     final FlowPanel rowPanel = new FlowPanel();
     rowPanel.setStyleName("FileRow");
       
     final HyperlinkPanel fileLink = FileInfoParser.getLinkPanel(info);
     fileLink.setStyleName("fileLink");
     fileLink.setTabIndex(tabIndex++);
     fileLink.setText("");
    switch (info.getFileExtension()) {
     case "png" :
      fileLink.addStyleName("png");
         fileLink.getElement().setId("png");
      break;
        case "jpg" :
      fileLink.addStyleName("jpg");
      fileLink.getElement().setId("jpg"+count);
      break;
        case "pdf" :
      fileLink.addStyleName("pdf");
      fileLink.getElement().setId("pdf");
      break;
        default :
      fileLink.addStyleName("file");
      fileLink.getElement().setId("file");
    }

rowPanel.add(fileLink);
count++;

}

click realization

Element openPng = Document.get().getElementById("png"); 
  Event.sinkEvents(openPng, Event.ONCLICK); 
  Event.setEventListener(openPng, new OpenModalHandler());

现在我的点击实现仅适用于具有所需 ID 的第一个元素。但是将来可能会有多个元素具有相同的 id,因此我无法提醒其他元素。

预期结果是当我单击第一个元素时,GWT 使用 Window.alert() 显示单击了哪个元素。

答案很简单。 为了跟踪点击了哪个元素,我刚刚修改了大小写:

fileLink.addClickHandler(new ClickHandlerData<Integer>(tabIndex) {
                        public void onClick(ClickEvent event) {
                            Window.alert("You clicked on " getData());
                        }
});

同时使用 ClickHandlerData

实现新的 class
public abstract class ClickHandlerData<I> implements ClickHandler {
  private I data;

  public ClickHandlerData(I data) {
      this.data = data;
  }

  public I getData() {
      return data;
  }

  public void setData(I data) {
      this.data = data;
  }
}