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