Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在动态加载的图像上捕获单击事件的最佳方法_Java_Eclipse_Gwt - Fatal编程技术网

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

Java 在动态加载的图像上捕获单击事件的最佳方法,java,eclipse,gwt,Java,Eclipse,Gwt,我正在使用EclipseJuno(带有最新补丁)、最新的GWT和java 我正在将图像加载到一个flextable中,将相关的姓氏和名字连接起来,并显示在一个7 x n的网格中的每个图像下面。我现在要做的是为每个图像指定一个唯一的名称,并为其指定一个单击处理程序。然后,我将在图像上拾取一个单击事件,并显示下一个填充了此人详细信息的视图 flextable是用于此目的的正确小部件,还是应该使用其他小部件来包含图像和名称 如何为每个图像指定一个唯一的名称,以便我知道选择了哪个图像 如何将唯一的图像名

我正在使用EclipseJuno(带有最新补丁)、最新的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
    }
}
public void renderyothmembertable(List youthMemberList){
if(youthMemberList!=null){
int行=0;
int col=0;
flexTable.clear();
for(YouthMember YouthMember:youthMemberList){
字符串imageDataString=youthMember.getPhotoshot();
//显示每个图像及其下的名称。
图像=新图像(imageDataString);
setWidget(行、列、图像);
setWidget(行+1,列,新标签(youthMember.getnames()+”,“+youthMember.getFirstname());
//添加单击处理程序
addClickHandler((ClickHandler)this);
//转到下一列,如果列的末尾
//删除两行并转到第一列
col=col+1;
如果(列>7){
行=行+2;
col=0;
}
}
}
}   
公共作废一次点击(点击事件){
//请注意,一般情况下,事件可以有非小部件的源。
Widget sender=(Widget)event.getSource();
如果(发送方==图像){
//正在单击的句柄image1
}
else if(发送方==image2){
//处理正在单击的image2
}
}
onClick还不起作用。这就是我想要实现的目标

谢谢你的帮助


Glyn

我认为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

更新:
添加的构造函数

是单击的
//句柄image1
和单击的
//句柄image2
仅对不同的图像执行相同的操作吗?嗨,NickD,是的,它们都将(和所有其他)将控制权传递到下一个视图,并使用所选人员的id,以便在视图中显示人员的详细信息。谢谢,Glyn.image.addClickHandler((ClickHandler)这个)看起来可疑吗?“这”是什么类型的!!!!嗨,enrybo,这是我需要的。我已经创建了类MyImage,但是当我尝试分配一个值“final MyImage MyImage=new MyImage(imageDataString);“我得到一个错误“构造函数MyImage(String)未定义”。由于这扩展了图像,我们应该能够执行与“图像=新图像(imageDataString);”相同的操作。我们只是添加了包含ID的功能。下一行“myImage.setId(youthMember.getId());”就可以了。我需要为图像重复MyImage类中的字符串代码吗?还是我做错了什么?谢谢你的帮助,格林。你所需要做的就是添加我上面添加的构造函数。请注意,您需要调用
super()
,以便调用父类的构造函数。您可以使用父类的任何构造函数调用
super()
,但必须确保
super()
调用必须是构造函数中的第一条语句。您好,enrybo,非常感谢。我一直在试验这个,发现了这个。也就是说,我不需要您所说的类,因为id与图像相关联。我不完全理解在没有类和手动将id与图像关联的情况下是如何实现的。那是我的家庭作业!我非常感谢你的帮助。我正在为这个项目创建一个博客教程(我的高级童子军领袖培训的一个木头徽章项目),我会确保我提到你和所有帮助过我的人。你好,格林。