1

Eclipse RCPに基づくアプリケーションがあり、エンドユーザーがさまざまなゲージ、ボタン、テキストなどを含む独自のダッシュボード(ビュー)を作成できるカスタムUIビルダーを作成したいと思います。いくつかの実装されたいくつかのUIビルダー(WindowBuilder SWTの場合と同様)のように、つまり、UI要素、プロパティ要素UIビルダーなどを含むパレットを含めるために、結果はXMLファイルに格納され、RCPアプリケーションがロードされてこのXMLファイルに格納されますビューを作成する必要があります。残念ながら、どこから始めればよいのか(何が問題なのか)、カスタムUIビルダーを作成する例がわかりません。

編集:私はすでに1つのUIビルダーを作成しているので、完全な初心者ですが、新しくより良いものを書きたいと思っています。xmlファイルの保存/ロードを解決する必要はありません。気になるのは(方法がわからない)実際のUIビルダーです。つまり、パレットUI要素の作成、マウスを使用した要素のコピーと移動、複数の要素の選択(移動)などです。

アドバイスありがとうございます。

4

2 に答える 2

3

非常によく似た要件がありましたが、RCP は使用しませんでした。作成した UI の構造を XML に保存して、UI を再度読み込む必要がある場合はいつでも読み込まれるようにしたいと考えています。したがって、XML を使用している場合は、UI を表す XML 標準ドキュメントのスキーマまたは XSD テンプレートを使用する必要があると思います。UI、サンプルで許可される要素を定義します: ボタン、テキストフィールド、ラベルなど。

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 を作成します。

于 2013-02-21T14:42:03.773 に答える
1

大規模なプロジェクトは、コードを記述できるようになるまで、小さな断片に分解することから始めます。

下から始めて上に作業することも、上から始めて下に作業することもできます。

分解に役立ついくつかの質問を次に示します。

あなたのプロジェクトはどのコンポーネント (ゲージ、ボタン、テキストなど) をサポートしますか?

ユーザーがパネルで使用できるコンポーネントはいくつありますか?

コーディングに関しては、マルチパネル エディターを使用して Eclipse RCP プロジェクトをセットアップしてください。

于 2013-02-21T14:46:49.233 に答える