我正在使用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尚未运行。这只是为了展示我想要实现的目标。
感谢您的帮助,
格林
答案 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
。
<强>更新强> 添加了构造函数