在动态加载的图像上捕获点击事件的最佳方法

时间:2013-02-12 22:21:42

标签: java eclipse gwt

我正在使用Eclipse Juno(带有最新的补丁),最新的GWT和java。

我正在将图像加载到flextable中,并将相关的姓氏和名字连接起来,并以7 x n网格显示在每个图像下方。我现在要做的是给每个图像一个唯一的名称,并为其分配一个点击处理程序。然后,我将在图像上选择一个点击事件,显示下一个填充了该人员详细信息的视图。

flextable是否可以使用正确的小部件,还是应该使用不同的小部件来包含图像和名称?

如何为每个图像指定一个唯一的名称,以便我知道选择了哪个图像?

如何将唯一图像名称传递给onClick侦听器?

这是我正在使用的代码:

public void renderYouthMemberTable(List<YouthMember> youthMemberList) {
    if (youthMemberList != null) {
        int row = 0;
        int col = 0;
        flexTable.clear();
        for (YouthMember youthMember : youthMemberList) {
            String imageDataString = youthMember.getPhotograph();

            //Display each image with the name under it.
            Image image = new Image(imageDataString);
            flexTable.setWidget(row, col, image);
            flexTable.setWidget(row + 1, col, new Label(youthMember.getSurname() + ", " + youthMember.getFirstname()));

            //Add click handler
            image.addClickHandler((ClickHandler) this);

            //Go to next column and if the end of the columns
            //drop two rows and go to the first column
            col = col + 1;
            if (col > 7) {
                row = row + 2;
                col = 0;
            }
        }
    }

}   


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

    if (sender == image) {
        // handle image1 being clicked
        }
    else if (sender == image2) {
        // handle image2 being clicked
    }
}

onClick尚未运行。这只是为了展示我想要实现的目标。

感谢您的帮助,

格林

1 个答案:

答案 0 :(得分:1)

我认为flex表适用于您的用例。

对于点击事件,为什么不进行内联?

image.addClickHandler(new ClickHandler(){

    @Override
    public void onClick(ClickEvent event){
        // Do something
    }

});

这样您就不需要处理触发事件或使用EventBus

如果您需要在图片中存储任何其他信息,只需展开Image并添加您需要的任何内容。如果您实现上述点击处理程序,则可能不需要此信息。

例如:

public class MyImage extends Image{

    private String id;

    public MyImage(String url){
        super(url);
    }

    public MyImage(String url, String id){
        super(url);
        this.id = id;
    }

    public void setId(String id){
        this.id = id;
    }

    public String getId(){
        return id;
    }

}

然后只使用MyImage代替Image

<强>更新 添加了构造函数