我需要在我的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) {
// ????
}
如何连接两者?
答案 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代码。