我想从远程服务器(不是我的应用程序的服务器,但我认为这不重要)获取图像并将其显示在现有的图像小部件中。现有小部件显示其原始内容,来自 ClientBundle ImageResource ,OK。
在 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 没有“逻辑附加”有关,但我不完全确定这意味着什么,我不知道如何纠正它如果那就是问题所在。
编辑解决方案摘要:我最初的预感是正确的。因为我选择在第二个伪小部件(...extends Composite
) 将我的 UiBinder 模板与实现我的应用程序的大部分 UI 的主要伪小部件共享,我遇到了麻烦。我忽略了将第二个伪小部件添加到 RootPanel,就像在实现 EntryPoint 的类中通常所做的那样。这使我的 Image 小部件未附加到小部件链,因为它的父级,第二个伪小部件未附加。并且必须附加一个 Image 小部件才能工作。我最终做的是将 Image 代码移回我的主应用程序/GUI 类,即移入第一个现在只有伪小部件,并放弃 Image 代码的特殊类。我这样做是因为它更简单,而且图像代码没有我最初想象的那么长。