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 が合わさったみたいなウィジェットです。
さて、実行だ。
あれれ、寸づまりになっちゃった。
だいたいこういうときはレイアウトマネージャが悪いわけですが、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; }
こんどこそうまくいくでしょう。
できましたっ ;-)