4

我想在 GWT 中创建一些非常简单的覆盖类来包装一些 SVG 内容。我基本上想画一个矩形,这就是我在javascript中的做法:

var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
svg.setAttribute('width', '100%');
svg.setAttribute('height', '100%');
document.body.appendChild(svg);

var rect = document.createElementNS('http://www.w3.org/2000/svg','rect');
rect.setAttribute("width","300");
rect.setAttribute("height","100");
svg.appendChild(rect);

现在我无法将其转换为 GWT。我希望我可以围绕所有这些调用做一个非常薄的覆盖,如下所示:

public class SVGPanel extends JavaScriptObject {
    protected SVGPanel() {}

    public static native SVGPanel create(String width, String height) /*-{
        var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
        svg.setAttribute('width', width);
        svg.setAttribute('height', height);
        return svg;
    }-*/;
}

public MyProject implements EntryPoint {

    public void onModuleLoad() { 
        SVGPanel panel = SVGPanel.create("100%", "100%");
        Document.get().getBody().appendChild(panel);
    }
}

是的,但我不知道我们如何从 SVG 的 javascript 表示跳转到 GWT java 类。一方面,SVGPanel 类扩展了 JavaScriptObject,但我不能简单地将它添加到 Document 正文类中,因为它需要一个 Element 类型。如果有人能指出做那座桥的正确方法,我应该能够在那之后继续前进。

另外,我不确定这是否是合并一些简单 SVG 类的最佳方式,我应该使用 DOM 类而不是尝试使用 JSNI 来建模它们吗?

谢谢

4

2 回答 2

2

您需要为 appendChild 提供一个元素。因此,只需让您的覆盖类扩展 Element 而不是 JavaScriptObject。

public class SVGPanel extends Element {

请注意,Element 是 JavaScriptObject 的子类。

于 2010-01-26T05:44:19.720 回答
0

我认为值得一试gwt-svg - 虽然看起来他们在 2007 年左右停止了开发,但代码库似乎足够稳固,很好地说明了你想要做什么,而且它有一些不错的功能,比如(邪恶的)IE6 的特殊实现. 即使代码不能按原样工作,希望它能给你一个开始的想法(也许你甚至会将你的工作开源,以便其他人可以从中受益)。

还有GWTCanvas - 这可能是你想要实现的 :) 如果没有,至少值得检查一下他们的 API,看看他们是如何处理事情的。

祝你好运!

于 2010-01-25T20:14:21.293 回答