GWT可以通过JSNI使用Raphael吗?

时间:2013-12-07 13:47:07

标签: java javascript gwt raphael jsni

我需要在我的GWT应用程序中进行一些客户端2D绘图(没什么特别的,只需绘制一堆基本的2D形状 - 圆形,矩形等)。

我不相信GWT有图形/绘图框架,所以我想知道是否有任何方法可以使用JSNI以某种方式连接到知名的Raphael JS库并从中调用Raphael在GWT内部。

如果无法做到这一点,有人可以解释为什么以及我的选择可能是什么?

如果这是可能的,那么请考虑以下拉斐尔代码绘制正方形:

paper = new Raphael(0,0,500,500);
var rect = paper.rect(x,y,width,height).attr({"fill":"white","stroke":"red"});

我想在用户点击按钮时执行上面的JS代码。这是我的GWT点击处理程序:

@UiHandler("signInButton")
void onClickSignInButton(final ClickEvent clickEvent) {
    // ????
}

如何连接两者?

1 个答案:

答案 0 :(得分:1)

在JSObject类中包装Raphael类。

public final RaphaelJSO {
    protected RaphaelJSO(){}

    public static RaphaelJSO getNew(float a, float b, float c, float d){
        return getNewInner(a,b,c,d);
    }

    private native static RaphaelJSO getNewInner(float a, float b, float c, float d)/*-{
        return new Raphael(a, b, c, d);
    }-*/;

    public JSObject circle(int a,int b, int c){
        return circle(this,a,b,c);
    }

    private native JSObject circle(RaphaelJSO o, int a, int b, int c)/*-{
        return o.circle(a,b,c);
    }-*/;

}

同样,你可以包装其他类和/或提供方法。

然后调用此Java代码。