S2JFaceにおけるレイアウトデータの一括指定

S2JFace新方式での画面定義XMLの書き方についてまとめてみます。

S2JFaceでは、複数のコンポーネントを並べる際、 タグで括ります。これは、HTML でいうところの

タグと同じイメージです。(SWT的には、composite オブジェクトそのものに対応します)

composite 内に並べるボタンやラベル、テキストフィールドといったGUI要素(これをコントロールと呼びます)は、以下のような感じで タグの中に並べて書いていきます。

    <composite>
      <button id="guButton" text="グー!" />
      <button id="cyokiButton" text="チョキ!" />
      <button id="paButton" text="パー!" />
    </composite>

コントロールの配置方法は、以下のように タグの中に といったレイアウト指定タグを記述してしています。(現在のところ、この3種類のレイアウトに対応しています)

  <composite>
    <gridLayout numColumns="3" marginHeight="5" marginWidth="5" />
    
    <button id="guButton" text="グー!" />
    <button id="cyokiButton" text="チョキ!" />
    <button id="paButton" text="パー!" />
  </composite>

さらに、rowLayout や gridLayout では、それぞれ タグや タグ(レイアウトデータタグ)をコントロールタグに中に記述することでレイアウトの細かな振る舞いを指定できます。(このあたりも、SWTのレイアウトの考え方そのものです)

  <composite>
    <gridLayout numColumns="3" marginHeight="5" marginWidth="5" />
    
    <button id="guButton" text="グー!">
      <gridData horizontalAlignment="CENTER" verticalAlignment="CENTER" />
    </button>
    
    <button id="cyokiButton" text="チョキ!">
      <gridData horizontalAlignment="CENTER" verticalAlignment="CENTER" />
    </button>
    
    <button id="paButton" text="パー!">
      <gridData horizontalAlignment="CENTER" verticalAlignment="CENTER" />
    </button>
  </composite>

でも、これだと各コントロールに gridData タグを書かなければならないので、結構面倒です(SWTのプログラミング上でも同様に面倒です)。

そこで、S2JFace ではレイアウトデータの一括指定ができるようになっています。以下のように、レイアウトタグ(この場合は gridLayoutタグ)の内部に、一括指定したいレイアウトデータタグ(この場合は、gridDataタグ)を記述することで、composite内のすべてコントロールに対して同じレイアウトデータを適用することができます。

  <composite>
    <gridLayout numColumns="3" marginHeight="5" marginWidth="5">
      <gridData horizontalAlignment="CENTER" verticalAlignment="CENTER" />    </gridLayout>
    
    <button id="guButton" text="グー!" />
    <button id="cyokiButton" text="チョキ!" />
    <button id="paButton" text="パー!" />
  </composite>