Property の画面を作る

画面を作るといっても、今のところ設定するのは 1 つの項目だけですが ^^;;

LG3DHOME を設定する画面を作っていきます。

すでに Property の画面はあるので、むかーしのウィンドウシステムのプログラミング (Windows にあらず) みたいなイベントループなどは書かなくてもいいそうです。

createContents メソッドは Composite オブジェクトが引数なので、そこに自分のウィジェットを追加して、イベント処理をすればいいようです。Composite クラスというのは Swing でいう JContainer みたいなものですね。ついでにいうとウィジェットコンポーネントに相当するわけですか。

でも、add メソッドがなくて、親をウィジェットのコンストラクタで指定するわけですか。

    protected Control createContents(Composite parent) {
        Group homeGroup = new Group(parent, SWT.NONE);
        homeGroup.setLayout(new GridLayout(1, false));

        home = new DirectoryFieldEditor(
                WrpePlugin.LG3D_RREF_HOME_KEY,
                "LG3D Home",
                homeGroup);
        
        return parent;
    }

DirectoryFieldEditor というのは、複合ウィジェットで Swing でいうところの JLabel と JTextField と JFileChooser が合わさったみたいなウィジェットです。

さて、実行だ。

LG3D Preference Page

あれれ、寸づまりになっちゃった。

だいたいこういうときはレイアウトマネージャが悪いわけですが、GridLayout ってこれで使い方が間違っているのでしょうか?

と、ここで Understanding Layouts in SWT (http://www.eclipse.org/articles/) を見る。SWT 2.0 ベースのようですが、基本は変わらないでしょう。

おぉ、GridData クラスなんてものがあるんですか。AWT の GridBagConstraints クラスみたいなものでしょうか。

というわけで、GridData オブジェクト作って追加してみました。

    protected Control createContents(Composite parent) {
        Group homeGroup = new Group(parent, SWT.NONE);
        homeGroup.setLayout(new GridLayout(1, false));
        GridData data = new GridData(GridData.FILL_BOTH);
        data.horizontalSpan = 1;
        data.widthHint = 400;
        homeGroup.setLayoutData(data);

        home = new DirectoryFieldEditor(
                WrpePlugin.LG3D_RREF_HOME_KEY,
                "LG3D Home",
                homeGroup);
        
        return parent;
    }

こんどこそうまくいくでしょう。

LG3D Preference Page

できましたっ ;-)