如何在PlayN HTMLGraphicsCanvas中覆盖GWT提供的CanvasElement实现?
我希望提供我自己的类实现。该类在PlayN堆栈中的类中实例化 这样做的理想方式是什么?我尝试过两种方法,但都失败了: A) 子类化HTMLGraphics和HTMLPlatform--这似乎是不可能的 B) GWT模块机制似乎要求我对GWT提供的类的自定义实现属于同一个包。以这个XML片段为例:如何在PlayN HTMLGraphicsCanvas中覆盖GWT提供的CanvasElement实现?,gwt,playn,Gwt,Playn,我希望提供我自己的类实现。该类在PlayN堆栈中的类中实例化 这样做的理想方式是什么?我尝试过两种方法,但都失败了: A) 子类化HTMLGraphics和HTMLPlatform--这似乎是不可能的 B) GWT模块机制似乎要求我对GWT提供的类的自定义实现属于同一个包。以这个XML片段为例: <replace-with class="com.google.gwt.dom.client.DOMImplOpera"> <when-type-is class="com.g
<replace-with class="com.google.gwt.dom.client.DOMImplOpera">
<when-type-is class="com.google.gwt.dom.client.DOMImpl"/>
<when-property-is name="user.agent" value="opera"/>
</replace-with>
如果我这样做:
<replace-with class="com.domain.example.CustomCanvasElement">
<when-type-is class="com.google.gwt.dom.client.CanvasElement"/>
<when-property-is name="user.agent" value="opera"/>
</replace-with>
…它似乎不起作用,因为包不同。至少我认为这是正在发生的事情
还有其他想法吗?非常感谢。好的,我可以回答我自己问题的B)部分。尽管我非常希望能够回答关于如何提供自己的实现的总体问题
所以我的猜测并不完全正确。根据的这一部分,基本上您必须首先创建一个超类对象,浏览器特定的对象将子类化。例如:
GenericBrowserObject
是超类,可能在特定于浏览器的对象之间有特定方法的通用实现,也可能是所有其他(非特定)浏览器的“全面”实现
例如,假设您只希望为基于IE和Gecko的浏览器提供特定的实现
geckobrowservObject扩展了GenericBrowserObject
IEBrowserObject扩展了GenericBrowserObject
假设在GenericBrowserObject
中有一个名为setStyle
的常用方法,但是geckobrowservobject
和iebrowservobject
之间有不同的实现,那么您可以在每个类中重写setStyle
,并提供它们自己的实现
操作这些对象的类需要以以下方式实例化GenericBrowserObject
超类:
GenericBrowserObject obj = GWT.create(GenericBrowserObject.class);
obj.setStyle("whatever");
然后在模块文件(something.gwt.xml)中,您将有如下内容:
<replace-with class="com.domain.blah.GenericBrowserObject">
<when-type-is class="com.domain.blah.GenericBrowserObject"/>
</replace-with>
<replace-with class="com.domain.blah.IEBrowserObject">
<when-type-is class="com.domain.blah.GenericBrowserObject"/>
<any>
<when-property-is name="user.agent" value="ie6"/>
<when-property-is name="user.agent" value="ie8"/>
</any>
</replace-with>
<replace-with class="com.domain.blah.GeckoBrowserObject">
<when-type-is class="com.domain.blah.GenericBrowserObject"/>
<any>
<when-property-is name="user.agent" value="gecko"/>
<when-property-is name="user.agent" value="gecko1_8"/>
</any>
</replace-with>
当GWT编译此文件时,它将通过GWT.create基于用户代理字符串生成正确的对象