我想为图像添加一个单击处理程序,以更改图像的大小。 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
我该怎么做?感谢。
答案 0 :(得分:0)
response
和i
变量应该是最终的。这就是编译器无法编译此代码的原因。但是你不能让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。如果它需要访问定义它的方法中的某个变量/参数,那么这样的变量/参数必须是最终的。