リモートサーバー(アプリのサーバーではありませんが、それは問題ではないと思います)から画像を取得し、既存の画像ウィジェットに表示したいと考えています。既存のウィジェットは、 ClientBundle ImageResource からの元のコンテンツを表示します。
UiBinder テンプレート:
<g:Image ui:field='myImage' resource='{res.anImage}'/>
コード内:
@UiField Image myImage;
...
int width = Window.getClientWidth();
int height = Window.getClientHeight();
String url = ...;
myImage.addErrorHandler(new ErrorHandler() {
public void onError(ErrorEvent event) {
Window.alert("Error getting image data: " + event);
}
});
myImage.addLoadHandler(new LoadHandler() {
public void onLoad(LoadEvent event) {
Window.alert("LoadEvent: " + event);
}
});
myImage.setUrlAndVisibleRect(url, 0, 0, width, height);
私が知る限り、 setUrlAndVisibleRect はノーオペレーションです。FireBug はネットワーク アクティビティを報告しません。つまり、URL で指定されたサーバーへの要求はありません。私は何を見落としていますか?これを機能させようとする私の拡張されたスラッシングで、myImageが「論理的に接続」されていないことに関係がある可能性があると推測しましたが、それが何を意味するのか完全にはわかりません。それが問題だ。
解決策の概要を編集: 私の最初の予感は正しかった。2 番目の疑似ウィジェット (...extends Composite
) 私の UiBinder テンプレートを、私のアプリのほとんどの UI を実装するメインの疑似ウィジェットと共有していたので、問題が発生しました。EntryPoint を実装するクラスで通常行われているように、この 2 番目の疑似ウィジェットを RootPanel に追加することを怠っていました。これにより、親である 2 番目の疑似ウィジェットが接続されていなかったため、イメージ ウィジェットがウィジェット チェーンに接続されていません。また、動作させるには画像ウィジェットを添付する必要があります。私が最終的に行ったことは、Image コードをメインのアプリ/GUI クラスに戻すことです。つまり、最初の、現在は唯一の疑似ウィジェットに戻し、Image コードの特別なクラスを放棄しました。私がそうしたのは、それがより単純であり、Image コードが最初に考えていたほど長くないことが判明したためです。