ツリー構造のDOMを確認した後、background-url css属性を使用してツリーアイコンが表示されていることがわかりました。画像が正しいサイズで表示されるようにするには、要素の属性src
にプレースホルダ画像urlが入力されます。
実際の画像の上に表示されるため、プレースホルダ画像をオーバーレイアイコンで置き換えるのが難点です。
tree.setIconProvider(new ModelIconProvider<ModelData>() {
public AbstractImagePrototype getIcon(ModelData model) {
return OverlayImagePrototype.create(model.get("icon"), model.get("overlayIconUrl"));
}
});
:
public class OverlayImagePrototype extends ClippedImagePrototype {
protected String overlayImageUrl = null;
public static AbstractImagePrototype create(ImageResource resource, String overlayUrl) {
return new OverlayImagePrototype(resource.getSafeUri(),
resource.getLeft(), resource.getTop(), resource.getWidth(),
resource.getHeight(), overlayUrl);
}
private OverlayImagePrototype(SafeUri url, int left, int top, int width,
int height, String overlayUrl) {
super(url, left, top, width, height);
this.overlayImageUrl = overlayUrl;
}
public ImagePrototypeElement createElement() {
ImagePrototypeElement imgEl = super.createElement();
if (overlayImageUrl != null) {
imgEl.setAttribute("src", overlayImageUrl);
}
return imgEl;
}
}
これは私がIconProvider
実装でOverlayImagePrototype
を使用する方法である:
は、これを実現するために、私はオーバーレイ画像のURLを注入するClippedImagePrototype
を拡張しました