总而言之,对新组件的支持需要在 GWT Designer 中添加对该组件的特殊支持。假设我有一个自定义组件,我希望它像 VerticalPanel 一样工作,但实际上是复合类型:
public class CustomPanel extends Composite implements HasWidgets{
private VerticalPanel panel = new VerticalPanel();
public CustomPanel() {
initWidget(panel);
}
@Override
public void add(Widget w) {panel.add(w);}
@Override
public void clear() {panel.clear();}
@Override
public Iterator<Widget> iterator() {return panel.iterator();}
@Override
public boolean remove(Widget w) {return panel.remove(w);}
}
这将作为一个 VerticalPanel 工作,但是当您从设计师的角度来看时,它仍然是一个 Composite。因此,您不能将小部件放入其中。在最简单的情况下,为了使其对设计者友好,您应该做的是在同一个 CustomPanel 包中按照给定的命名约定创建一个 CustomPanel.wbp-component.xml。提供像小部件添加行为这样的流程的简单方法是,
<?xml version="1.0" encoding="UTF-8"?>
<component xmlns="http://www.eclipse.org/wb/WBPComponent">
<description>This is a simple Composite acting like VerticalPanel</description>
<!-- CREATION -->
<creation>
<source><![CDATA[new org.test.client.CustomPanel()]]></source>
</creation>
<parameters>
<parameter name="flowContainer">true</parameter>
<parameter name="flowContainer.horizontal">false</parameter>
<parameter name="flowContainer.association">%parent%.add(%child%)</parameter>
</parameters>
</component>
添加此步骤后,gwt 设计器也应将您的复合材料视为垂直面板(将小部件放置在支撑内)。当仅此 XML 还不够时,意味着您需要一些更复杂的行为,您需要开始编写 java 模型类,将组件的自定义行为定义到 Designer,并使用<model>
标记在组件 xml 中引用它。在这种情况下,您需要编写一个插件来托管您的模型和策略。
以下是此摘要的参考资料和有用的链接: