2011-03-10 7 views
1

GWT를 사용하여 중앙의 PopupPanel에서 전체 이미지 (수 MB 일 수 있음)를 표시하는 ClickHandler로 이미지 축소판을 표시합니다. 중앙에 배치하려면 팝업이 표시되기 전에 이미지를로드해야합니다. 그렇지 않으면 이미지의 왼쪽 상단이 화면 중앙에 배치됩니다 (이미지는 1 픽셀 큼). 이것은 내가이 일을 사용하고있는 코드입니다 :중앙에 배치 된 PopupPanel onLoad에 GWT 이미지 표시

private void showImagePopup() { 
     final PopupPanel popupImage = new PopupPanel(); 
     popupImage.setAutoHideEnabled(true); 
     popupImage.setStyleName("popupImage"); /* Make image fill 90% of screen */ 

     final Image image = new Image(); 
     image.addLoadHandler(new LoadHandler() { 
      @Override 
      public void onLoad(LoadEvent event) { 
       popupImage.add(image); 
       popupImage.center(); 
      } 
     }); 
     image.setUrl(attachmentUrl + CFeedPostAttachment.ATTACHMENT_FILE); 
     Image.prefetch(attachmentUrl + CFeedPostAttachment.ATTACHMENT_FILE); 
    } 

그러나, LoadEvent 이벤트가 발생하지 않습니다, 따라서 이미지가 표시되지 않습니다. 어떻게 이것을 극복 할 수 있습니까? http://code.google.com/p/gwt-image-loader/을 사용하지 않으려는 이유는 추가 라이브러리를 추가하고 싶지 않기 때문에 전혀 피할 수 있기 때문입니다. 감사.

답변

3

onLoad() 메서드는 이미지가 DOM에로드 된 후에 만 ​​실행됩니다. 빠른 해결 방법은 다음과 같습니다.

... 

final Image image = new Image(attachmentUrl + CFeedPostAttachment.ATTACHMENT_FILE); 
image.addLoadHandler(new LoadHandler() { 
    @Override 
    public void onLoad(LoadEvent event) { 
     // since the image has been loaded, the dimensions are known 
     popupImage.center(); 
     // only now show the image 
     popupImage.setVisible(true); 
    } 
}); 

popupImage.add(image); 
// hide the image until it has been fetched 
popupImage.setVisible(false); 
// this causes the image to be loaded into the DOM 
popupImage.show(); 

... 

희망이 있습니다.

+0

이것은 정말로 오래되었지만 실제로 이것이 나를 돕는 것을 알리고 싶었습니다. 로드 리스너가 작동하는 데 항상 문제가 있으며이 문제를 안정적으로 해결하는 유일한 솔루션입니다. 감사! – rjcarr

+0

@rjcarr - 도움이 되니 기뻤습니다 :) 예, 그것은 오래 전이었습니다. 더 이상 GWT와 함께 작동하지 않습니다. xD –