2011-04-26 91 views
0

我在將小部件添加到另一個容器類的RootPanel時遇到問題。我認爲它可能與我在創建窗口小部件期間創建的異步調用有關。我有一個名爲ImageView的主類實現了EntryPoint。在本課中,我通過單擊按鈕創建了一個名爲NewWidget的小部件實例。但是,我不能用傳統的方法顯示出來:GWT在RootPanel上顯示異步調用的小部件

這裏是入口點類(ImageView的):

import com.mycompany.project.client.widgets.NewWidget; 
public class ImageViewer implements EntryPoint { 

public void onModuleLoad() { 

    Button b = new Button("Button"); 
    RootPanel.get().add(b); 

    b.addClickHandler(new ClickHandler() { 
     public void onClick(ClickEvent event) { 
      NewWidget w = new NewWidget(); 
      RootPanel.get().add(w); 
     } 
    }); 
} 

這裏是我的小部件(NewWidget):

public class NewWidget extends Composite { 

    final static DataServiceAsync service = (DataServiceAsync) GWT.create(DataService.class); 

    final FlowPanel mainPanel = new FlowPanel(); 

    public NewWidget() { 
     fillImagePath(); 
    } 

    public void fillImagePath(){ 
    ServiceDefTarget endpoint = (ServiceDefTarget) service; 
    endpoint.setServiceEntryPoint(GWT.getModuleBaseURL() + "data"); 
     service.getAllDocuments(new AsyncCallback<ArrayList<String>>() { 
      @Override 
      public void onFailure(Throwable e) { 
       Window.alert("Server call failed."); 
      } 
      @Override 
      public void onSuccess(ArrayList<String> paths) { 
       process(paths); 
      } 
     }); 
    } 

    public void process(ArrayList<String> paths){ 
     ArrayList<String> imagePath = paths; 
     Image img = new Image(imagePath.get(4)); 
     mainPanel.add(img); 
     initWidget(mainPanel); 
    } 
} 

在這NewWidget,我正在對我的服務器進行異步調用以便接收包含10個字符串的字符串ArrayList,該字符串引用10個不同圖像(即「images/01.jpg」,「images/02.jpg」等等)的文件路徑。我非常確定,我成功並正確地接收了這些圖像路徑。我隨意選擇索引號4以顯示在我的NewWidget中。

的問題是,我不能在我的的ImageView主面板中顯示此NewWidget。我可以很容易地用這種方法顯示其他小部件。經過多次嘗試,我意識到如果在NewWidget的末尾添加線RootPanel.get().add(mainPanel),我可以顯示圖像。但是,我不想打一個指向父容器的調用(RootPanel在ImageView)。爲什麼我不能僅在我的容器面板中實例化該圖像,就像我可以顯示其他任何窗口小部件一樣?我非常確定,在嘗試添加小部件之前,它與異步調用沒有完成相關。但我不知道如何解決這個問題。

如果有人會分享他們的想法,我會很高興。謝謝。

回答

1

initWidget(mainPanel)調用移到構造函數的第一行。

+0

天哪......我覺得很愚蠢。這解決了它。非常感謝! – yunusual 2011-04-26 22:49:27