2012-02-11 2 views
0

이미지 크기를 변경하는 이미지에 클릭 핸들러를 추가하고 싶습니다. 나는이 기능을 사용하려면이미지 크기를 변경하는 GWT 이미지 클릭 핸들러

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

: Blob 저장소는 하나 쉽게 아래 라인에서 128 픽셀로 이미지를 변경합니다 "=의 S128"로, URL의 접미사를 변경하여 이미지의 크기를 변경할 수 있습니다 이미지를 클릭 한 후 크기를 변경하려면; 이 예에서와 같이, 원래 크기로 다시 변경 :

//-- 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"라인 제공 이 오류 :

Multiple markers at this line - Cannot refer to a non-final variable response inside an inner class defined in a different method - Cannot refer to a non-final variable i inside an inner class defined in a different method

어떻게하면됩니까? 감사.

답변

0

responsei 변수가 최종해야합니다. 그 이유는 컴파일러가이 코드를 컴파일 할 수 없기 때문입니다. 그러나 for 주기로 증가하므로 i을 최종 수 없게됩니다. 그래서 당신은 몇 가지 최종 변수에 복사해야합니다 :

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을 설정합니다 특별한 클릭 핸들러 클래스를 생성하는 것입니다.

UPDATE

이 구조는 :

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

anonymous class라고합니다. 변수를 정의하는 메소드에서 변수/매개 변수에 액세스해야하는 경우 변수/매개 변수가 최종적이어야합니다.

+0

감사합니다. jusio. 이렇게하면 문제가 해결됩니다. 이 경우 왜 이러한 변수가 최종적인 이유인지 당신의 답변에 친절하게 추가 할 수 있습니까? – aez