3

当我添加一个标准的 GWT VerticalPanel 时,我可以通过 GWT Designer 将小部件拖放到此面板中。GWT Designer 提供了一条红线,指示我正在向我的 VerticalPanel 添加一个小部件。

假设我想从头开始创建自己的面板,并且不想扩展标准 GWT 面板。我希望 GWT Designer 能够识别我的面板并提供与我使用标准 gwt 面板时相同的功能。

据我所知,Ext-GWT 等框架从头开始编写它们的小部件库,但它们与 GWT Designer 协同工作。我是否需要在自定义面板中实现某些方法才能实现此功能?非常感谢任何指导或想法。

谢谢

4

2 回答 2

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 工作,但是当您从设计师的角度来看时,它仍然是一个 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 中引用它。在这种情况下,您需要编写一个插件来托管您的模型和策略。

以下是此摘要的参考资料和有用的链接:

于 2011-09-21T21:07:16.743 回答
0

GWT Designer 文档有一个关于自定义组合和面板的页面,但这些与 Swing 和 SWT 组件有关。至于 GWT,文档建议使用GWT 的布局管理器以获得最大的可移植性。

于 2011-08-12T11:08:14.757 回答