2013-02-21 80 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项目。