我想从远程服务器(不是我的应用程序的服务器,但我认为不重要)获取图像,并将其显示在现有的Image小部件中。现有小部件显示其原始内容,来自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
)中实现图像代码,该小部件与实现我应用程序大部分UI的主伪小部件共享我的UiBinder模板,我遇到了麻烦。我忽略了将第二个伪小部件添加到RootPanel,这通常在实现EntryPoint的类中完成。这使得我的Image小部件未附加到小部件链,因为它的父级,第二个伪小部件是未附加的。并且必须附加图像小部件才能工作。我最终做的是将Image代码移回我的主app / GUI类,即,转移到第一个也是现在唯一的伪小部件,并放弃Image代码的特殊类。我这样做是因为它更简单,而且图像代码不像我原先想的那么长。
答案 0 :(得分:1)
向DOM添加图片有点棘手,下面的代码支持所有浏览器(setVisibility
技巧也支持IE,因为它有不同的图像渲染方式)。
我之前没有使用setUrlAndVisibleRect
和AFAIK,Image必须渲染到DOM才能调整它的大小。只需尝试以下代码。
image.addLoadHandler(new LoadHandler() {
@Override
public void onLoad(LoadEvent event) {
//Do your operations on image .//resize ..etc
image.getElement().getStyle().setVisibility
(Style.Visibility.Visible);
}
});
image.getElement().getStyle().setVisibility(Style.Visibility.HIDDEN);
RootPanel.get().add(image);
image.setUrl(url);
答案 1 :(得分:0)
您使用的是{{1>} 编译时 。您无法更改它,除非您在prev照片的确切位置替换新图像。可能的hack之一是,将图像放置在ID设置为{ClientBundle ImageResource
)的div中。一旦您获得新图片,就可以使用RootPanel.get("Your Id")来完成工作。