Проблема в том, что вы обращаетесь к 'z' в вашем обработчике кликов, но значение z изменяется, так что когда ваш обработчик кликов действительно вызывается, значение z неверно.
Вам нужна локальная конечная переменная в UpdateTabelGallery, которой вы назначаете текущее значение z, чтобы он мог быть захвачен созданным вами обработчиком. Более того, полностью избавьтесь от z и передайте i UpdateTableGallery:
public void updateTableGallery(GalleryData str, final int i){
Image img = new Image();
img.setUrl(str.getthumburl());
HTML himage= new HTML("a href="+str.geturl()+">"+ img +"/a>" + b[i] );
TabelGaleri.setWidget(y, x, himage);
//is here th right place?
b[i].addClickHandler(new ClickHandler(){
@Override
public void onClick(ClickEvent event) {
Window.alert("I wan't to show the clicked button text" + b[i].getText());
}
});
}
Но что вы ожидаете:
HTML himage= new HTML("a href="+str.geturl()+">"+ img +"/a>" + b[i] );
делать? Помимо неправильного синтаксиса HTML, я не думаю, что добавление кнопки ypur в строку будет работать.