GWT图像单击处理程序,可更改图像的大小

时间:2012-02-11 14:49:18

标签: image gwt

我想为图像添加一个单击处理程序,以更改图像的大小。 BlobStore允许通过更改URL的后缀轻松更改图像的大小,因为“= s128”会将图像更改为下面一行中的128像素:

im.setUrl(thing.get(i)+"=s128");

我希望使用此功能在单击图像后更改图像的大小;在此示例中,要更改回原始大小,例如:

//-- when clicked, do this:    
im.setUrl(thing.get(i));

我认为以下代码会为一组图像执行此操作:

for (int i=0; i<thing.size(); i++){
    final Image im = new Image();
    im.setUrl(thing.get(i)+"=s128");
    im.addClickHandler(new ClickHandler(){
         public void onClick(ClickEvent event){
            im.setUrl(response.get(i));
         }
     });
     htmlpanel.add(im,"imageGrid");
}

但是第二个“setUrl”行给了我这个错误:

  

此行有多个标记      - 不能在不同方法中定义的内部类中引用非最终变量响应      - 不能引用在不同方法中定义的内部类中的非final变量i

我该怎么做?感谢。

1 个答案:

答案 0 :(得分:0)

responsei变量应该是最终的。这就是编译器无法编译此代码的原因。但是你不能让i成为最终版,因为你在for周期中将其递增。所以你必须将它复制到一些最终变量中:

for (int i = 0; i < thing.size(); i++){
    final Image im = new Image();
    final int index = i; //here
    im.setUrl(thing.get(i) + "=s128");
    im.addClickHandler(new ClickHandler() {
         public void onClick(ClickEvent event) {
            im.setUrl(response.get(index ));
         }
     });
     htmlpanel.add(im, "imageGrid");
}

但最好的解决方案是创建特殊的点击处理程序类,它将特定的URL设置为特定的图像。

<强>更新

这个结构:

new ClickHandler() {
         public void onClick(ClickEvent event) {
            im.setUrl(response.get(index ));
         }
     }

称为anonymous class。如果它需要访问定义它的方法中的某个变量/参数,那么这样的变量/参数必须是最终的。