簡體   English   中英

如何在Eclipse RCP中創建自定義UI構建器

[英]How create custom UI builder in Eclipse RCP

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

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

謝謝你的建議。

我有一個非常相似的要求,但我沒有使用RCP。 我知道您希望將創建的UI的結構保存在XML中,然后在您再次加載UI時加載該XML。 所以我認為,如果您使用XML,則必須使用模式或XSD模板來表示UI的XML標准文檔。 定義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。

一個人通過分解成越來越小的片段來開始一個大型項目,直到你可以編寫一個片段的代碼。

您可以從底部開始工作,也可以從頂部開始工作。

以下是一些可以幫助您解決問題的問題。

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

用戶可以為面板提供多少個不同的組件?

至於編碼,請繼續使用多面板編輯器設置Eclipse RCP項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM