如何在Eclipse RCP中创建自定义UI构建器
我有一个基于Eclipse RCP的应用程序,我希望它创建自定义UI构建器,最终用户可以在其中创建自己的仪表板(View),其中将包含各种仪表,按钮,文本等。我只是想实现一些UI构建器(类似于WindowBuilder SWT),即将UI元素,属性元素UI构建器等包含在调色板中,结果将存储在XML文件中,这将加载RCP应用程序并在此XML文件中创建View。不幸的是,我不知道从哪里开始(捕获什么),一个创建自定义UI构建器的例子?如何在Eclipse RCP中创建自定义UI构建器
编辑:我已经做了一个UI生成器,所以我是一个完整的初学者,但我想写一个新的更好的。保存/加载xml文件不需要解决。什么让我困扰(不知道该怎么做)是实际的UI构建器,即创建调色板UI元素,使用鼠标复制和移动元素,选择多个元素(移动)等。
感谢您的咨询。
我有一个非常相似的要求,但我没有使用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。
通过decomposing将一个大型项目开始分成越来越小的部分,直到您可以编写一段代码。
您可以从底部开始工作,或者您可以从顶部开始并继续工作。
这里有几个问题可以帮助你分解。
您的项目将支持哪些组件(仪表,按钮,文本等)?
用户有多少个不同的组件可用于面板?
就编码而言,继续使用多面板编辑器设置Eclipse RCP项目。