GWT обработчик кликов изображений, который изменяет размер изображения - PullRequest
0 голосов
/ 11 февраля 2012

Я хотел бы добавить обработчик кликов к изображению, который изменяет размер изображения. 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" дает мне эту ошибку:

Несколько маркеров на этой линии - Невозможно сослаться на не окончательный ответ переменной внутри внутреннего класса, определенного в другом методе - Невозможно обратиться к неконечной переменной i внутри внутреннего класса, определенного в другом методе

Как я могу это сделать? Спасибо.

1 Ответ

0 голосов
/ 11 февраля 2012
Переменные

response и i должны быть окончательными.Вот почему компилятор не может скомпилировать этот код.Но вы не можете сделать i final, потому что увеличиваете его в цикле 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 ));
         }
     }

называется анонимным классом .Если ему требуется доступ к некоторой переменной / параметру в методе, который ее определяет, такая переменная / параметр должны быть окончательными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...