我知道如何将 svg-images 加载到 gwt:这里的最后一个答案
有了这个,我只是想创建一个“SvgImage”类。它应该像 gwt 的 image(url) 一样工作:我可以添加独立于加载状态的图像,一旦加载完成,图像就会变得可见。如何做到这一点?(我试图读取图像的源代码,但这很糟糕——既找不到加载 url 的位置,也找不到触发 LoadEvent 的位置)
或者一般来说,创建通过给定 url 加载其内容的小部件的好方法是什么?
我在 gwt 图像源中挖了一点点,发现有“replaceElement(Node)”——一种专门为图像制作的受保护方法,但这种方法基于
Widget.getElement().replaceChild(newElement, oldElement);
这是我完整的 SvgWidget 类:
public class SvgWidget implements IsWidget {
private String svgUrl;
private ADBTexte strings;
private IsWidget thisW;
private Loading loadingWidget;
@Inject
private SvgWidget(@Assisted final String svgUrl, final ADBTexte strings, final Loading loadingWidget) {
this.svgUrl = svgUrl;
this.strings = strings;
this.loadingWidget = loadingWidget;
}
@Override
public Widget asWidget() {
thisW = new SimplePanel(loadingWidget);
RequestBuilder rB = new RequestBuilder(RequestBuilder.GET, svgUrl);
rB.setCallback(new RequestCallback() {
@Override
public void onResponseReceived(final Request request, final Response response) {
Widget result = new HTML(response.getText());
thisW.asWidget()
.getElement()
.replaceChild(result.getElement(), thisW.asWidget().getElement().getChild(0));
}
@Override
public void onError(final Request request, final Throwable exception) {
Widget result = new Label(strings.chartError());
thisW.asWidget()
.getElement()
.replaceChild(result.getElement(), thisW.asWidget().getElement().getChild(0));
GWT.log("Error on loading chart: ", exception);
}
});
try {
rB.send();
} catch (RequestException e) {
Widget result = new Label(strings.chartError());
thisW.asWidget().getElement().replaceChild(result.getElement(), thisW.asWidget().getElement().getChild(0));
GWT.log("Error on sending request for chart: ", e);
}
return thisW.asWidget();
}
/**
* Use this to get an instance of {@link SvgWidget}.
*
*/
public interface Factory {
/**
*
* @param svgUrl
* url for svg graphic
* @return instance of {@link SvgWidget} displaying the svg accessible via the given url
*/
SvgWidget get(@Assisted String svgUrl);
}
}
相关的东西在 asWidget() 中。但我不确定这是否是一个好的/最好的解决方案:
(对于那些不知道依赖注入(使用 gin)的人:忽略所有未知的注释和工厂接口)