2011-08-12 27 views
3

當我添加我們說,一個標準的GWT VerticalPanel,與GWT設計師,我可以通過拖放它們添加小部件到這個面板。 GWT Designer提供了一條紅線,表示我正在向我的VerticalPanel添加一個小部件。如何編寫完全由GWT Designer識別的自定義小部件?

假設我想從頭創建自己的面板,並且我不想擴展標準的GWT面板。我希望GWT Designer能夠識別我的面板並提供與使用標準gwt面板時所提供的功能相同的功能。

據我所知,像Ext-GWT這樣的框架從零開始寫了它們的小部件庫,然而它們與GWT Designer一起工作。我是否需要在自定義面板中實現某些方法才能實現此功能?任何指導或想法都很受讚賞。

謝謝

回答

0

GWT Designer文檔有一個關於custom composites and panels頁面,但這些屬於Swing和SWT組件。至於GWT,文檔建議使用GWT's layout managers以實現最大的可移植性。

+0

謝謝你,可惜我找不到什麼我正在尋找這些鏈接。我有複製粘貼的GWT VerticalPanel類和它的所有父母,直到Widget類,在不同的包中使用不同的名稱。我期望它具有與VerticalPanel相同的功能。確實它具有相同的功能,但gwt設計者不會將其視爲面板,這意味着我無法在其中拖放小部件。所以問題是GWT Designer如何知道它們的區別? – pistolPanties

3

總而言之,對新組件的支持需要爲此組件添加對GWT Designer的特殊支持。假設我有我希望它像一個VerticalPanel扮演一個自定義組件,但其INFACT是型複合:

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。一個簡單的人給流比如Widget添加行爲會,

<?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模型類,然後使用<model>標記將其引入到您的組件xml中。在這種情況下,您需要編寫一個插件來託管您的模型和策略。

下面是該總結和有用的鏈接引用: