2013-02-21 78 views
1

我有一個基於Eclipse RCP的應用程序,我希望它創建自定義UI構建器,最終用戶可以在其中創建自己的儀表板(View),其中將包含各種儀表,按鈕,文本等。我​​只是想實現一些UI構建器(類似於WindowBuilder SWT),即將UI元素,屬性元素UI構建器等包含在調色板中,結果將存儲在XML文件中,這將加載RCP應用程序並在此XML文件中創建View。不幸的是,我不知道從哪裏開始(捕獲什麼),一個創建自定義UI構建器的例子?如何在Eclipse RCP中創建自定義UI構建器

編輯:我已經做了一個UI生成器,所以我是一個完整的初學者,但我想寫一個新的更好的。保存/加載xml文件不需要解決。什麼讓我困擾(不知道該怎麼做)是實際的UI構建器,即創建調色板UI元素,使用鼠標複製和移動元素,選擇多個元素(移動)等。

感謝您的諮詢。

回答

3

我有一個非常相似的要求,但我沒有使用RCP。我知道您希望將創建的UI的結構保存在將要加載的XML中,然後只要您想再次加載UI。所以我認爲,如果您使用的是XML,那麼您必須爲表示UI的XML標準文檔使用模式或XSD模板。定義UI中允許使用哪些元素,例如:按鈕,文本區域,標籤等。您需要有一個定義良好的模板,因爲無論何時寫入xml或讀取xml,它都必須儘可能標準。

如果你與xsd不協調,你可以先定義你的xml,然後使用一個xsd生成器,它們中有很多是在線的。

例如:

<UIBuilder> 
<ownerProperties> 
<username>Marcelo Tataje</username> 
</ownerProperties> 
<ui> 
<header> 
<textlabel label="Welcome" /> 
</header> 
<menu> 
<button label="Home" name="btnHome">goHome()</button> 
<button label="Contacts" name="btnContacts">showContacts()</button> 
</menu> 
<mainFrame> 
<textfield label="Name:" name="txtName" canEdit=false /> 
<button label="Show name" name="btnProcess">processData()</button> 
</mainFrame> 
<footer></footer> 
</ui> 
<UIBuilder> 

在此基礎上,你可以創建一個模式:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="UIBuilder"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="ownerProperties"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element type="xs:string" name="username"/> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     <xs:element name="ui"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="header"> 
       <xs:complexType> 
        <xs:sequence> 
        <xs:element name="textlabel"> 
         <xs:complexType> 
         <xs:simpleContent> 
          <xs:extension base="xs:string"> 
          <xs:attribute type="xs:string" name="label"/> 
          </xs:extension> 
         </xs:simpleContent> 
         </xs:complexType> 
        </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
       <xs:element name="menu"> 
       <xs:complexType> 
        <xs:sequence> 
        <xs:element name="button" maxOccurs="unbounded" minOccurs="0"> 
         <xs:complexType> 
         <xs:simpleContent> 
          <xs:extension base="xs:string"> 
          <xs:attribute type="xs:string" name="label" use="optional"/> 
          <xs:attribute type="xs:string" name="name" use="optional"/> 
          </xs:extension> 
         </xs:simpleContent> 
         </xs:complexType> 
        </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
       <xs:element name="mainFrame"> 
       <xs:complexType> 
        <xs:sequence> 
        <xs:element name="textfield"> 
         <xs:complexType> 
         <xs:simpleContent> 
          <xs:extension base="xs:string"> 
          <xs:attribute type="xs:string" name="label"/> 
          <xs:attribute type="xs:string" name="name"/> 
          <xs:attribute type="xs:string" name="canEdit"/> 
          </xs:extension> 
         </xs:simpleContent> 
         </xs:complexType> 
        </xs:element> 
        <xs:element name="button"> 
         <xs:complexType> 
         <xs:simpleContent> 
          <xs:extension base="xs:string"> 
          <xs:attribute type="xs:string" name="label"/> 
          <xs:attribute type="xs:string" name="name"/> 
          </xs:extension> 
         </xs:simpleContent> 
         </xs:complexType> 
        </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
       <xs:element type="xs:string" name="footer"/> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

我用http://www.freeformatter.com/xsd-generator.html

,並使用JAXB創建邏輯處理創建基於定義良好的XML文檔的UI。

1

通過decomposing將一個大型項目開始分成越來越小的部分,直到您可以編寫一段代碼。

您可以從底部開始工作,或者您可以從頂部開始並繼續工作。

這裏有幾個問題可以幫助你分解。

您的項目將支持哪些組件(儀表,按鈕,文本等)?

用戶有多少個不同的組件可用於面板?

就編碼而言,繼續使用多面板編輯器設置Eclipse RCP項目。