0

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

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

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 还没有工作。这只是为了展示我想要实现的目标。

谢谢你的帮助,

格林

4

1 回答 1

1

我认为弹性表适合您的用例。

对于点击事件,你为什么不内联呢?

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.

更新: 添加了构造函数

于 2013-02-13T03:11:31.377 回答