当我添加一个标准的GWT VerticalPanel时,使用GWT Designer我可以通过拖放来添加小部件到这个面板。 GWT Designer提供了一条红线,表示我正在向VerticalPanel添加一个小部件。
假设我想从头开始创建自己的面板,我不想扩展标准的GWT面板。我希望GWT Designer能够识别我的面板并提供与使用标准gwt面板时相同的功能。
据我所知,Ext-GWT等框架从头开始编写小部件库,但它们与GWT Designer协同工作。我是否需要在自定义面板中实现某些方法才能实现此功能?任何指导或想法都很受欢迎。
谢谢
答案 0 :(得分:3)
总而言之,对新组件的支持需要在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工作,但是从设计师的角度来看,这仍然是一个复合材料。因此,您无法将小部件放入其中。在最简单的情况下,为使设计人员友好,您应该做的是在给定名称约定之后的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中引用它。在这种情况下,您需要编写一个插件来托管您的模型和策略。
以下是此摘要和有用链接的参考资料:
答案 1 :(得分:0)
GWT Designer文档有一个关于custom composites and panels的页面,但这些页面与Swing和SWT组件有关。至于GWT,文档建议使用GWT's layout managers以获得最大的可移植性。