Eclipseプラグインを作ってみよう!

第7回 画面の作成(2)

この記事を読むのに必要な時間:およそ 6 分

前回でMasterDetailsBlockクラスを継承したFieldsBlockクラスを作成し,確認のためのラベルとテキストボックスの表示しました。今回からはMaster(一覧),Details(詳細)を作っていきます。

Master(一覧)の実装

最初にMaster(一覧)の実装から行います。一覧表示できるウィジェットにはツリーやリストなどさまざまなウィジェットがありますが,ここではテーブルを使用します。テーブルにはフィールド名と説明を表示することにします。またマニフェストエディターと同様に[追加],[削除],[上へ],[下へ]の各ボタンを実装することにします。

Master(一覧)のラフスケッチ

Master(一覧)のラフスケッチ

テーブルの表示

それでは,Master(一覧)にテーブルを表示してみましょう。まず,FieldsBlockクラスのcreateMasterPart()メソッドで,セクションのタイトルと説明を変更します。次に確認のために配置したラベルとテキストボックスを削除し,テーブルを生成します。

FieldBlockクラスのcreateMasterPart()メソッドでテーブルを生成する

protected void createMasterPart(
                IManagedForm managedForm,
                Composite parent) {
    FormToolkit toolkit = managedForm.getToolkit();

    Section section = toolkit.createSection(parent, 
            Section.TITLE_BAR | Section.DESCRIPTION);
    section.setText("フィールド一覧");
    section.setDescription("編集するフィールドを選択してください。");

    Composite composite = toolkit.createComposite(section);
    composite.setLayout(new GridLayout(2, false));
    
    Table table = toolkit.createTable(
                    composite, 
                    SWT.SINGLE | SWT.FULL_SELECTION);
    table.setHeaderVisible(true);
    table.setLinesVisible(true);
    
    TableColumn column1 = new TableColumn(table, SWT.NULL);
    column1.setText("フィールド名");
    column1.setWidth(100);

    TableColumn column2 = new TableColumn(table, SWT.NULL);
    column2.setText("説明");
    column2.setWidth(100);

    section.setClient(composite);
}

ラベルやテキストボックスと同様にFormToolkitクラスのファクトリーメソッドcreateTable()を使用してテーブルを生成します。テーブルは行全体を一度に1行だけ選択できるようにするため,SWT.SINGLE, SWT.FULL_SELECTIONを指定します。それでは実行してみましょう。

Master(一覧)にテーブルが表示されました

Master(一覧)にテーブルが表示されました

Master(一覧)にテーブルが表示されました。しかし,マニフェストエディターのようにエディターの枠全体に広がっていません。どのようにすればテーブルを枠全体に広げることができるのでしょうか。

レイアウト

テーブルの表示サイズについて考える前に,ウィジェットの配置方法について考えてみましょう。SWT(Standard Widget Toolkit)を基盤としたUIコンポーネントの配置は設定されたレイアウトによって決まります。SWTでは標準的なレイアウトクラスとして下記の3つを提供しています。

FillLayoutクラス

もっともシンプルなレイアウトです。ウィジェットは垂直・水平いずれかの指定された方向に対して同じサイズで配置されます。使いやすい反面,ウィジェットのサイズが等分されるので,あまり見栄えのしないレイアウトになります。

FillLayoutクラスを使った垂直・水平方向へのウィジェットの配置

FillLayoutクラスを使った垂直・水平方向へのウィジェットの配置

RowLayoutクラス

FillLayoutクラスよりも一般的に使用されているのがRowLayoutクラスです。FillLayoutクラスと同じく,垂直または水平方向にウィジェットを配置していきますが,ウィジェットのサイズは等分されません。

RowLayoutクラスを使ったウィジェットの配置

RowLayoutクラスを使ったウィジェットの配置

GridLayoutクラス

GridLayoutクラスは標準的なレイアウトクラスの中で最も一般的に使われています。ウィジェットをグリッド(格子)上に配置していくことができるため,柔軟な配置を行うことができます。

GridLayoutクラスを使ったウィジェットの配置(列数を2に指定)

GridLayoutクラスを使ったウィジェットの配置(列数を2に指定)

子を保持できるウィジェット(Compositeクラスを継承したウィジェット)に対してレイアウトを設定することで,ウィジェットの配置を制御することができます。なお,SWTのレイアウトについては,Eclipse Corner ArticleUnderstanding Layouts in SWTに詳しく説明されていますので,ご参照ください。

著者プロフィール

松藤秀治(まつふじひではる)

Piece Frameworkのプログラマー。担当はEclipseのプラグインとして開発されているPiece Frameworkの統合開発環境Piece_IDE。2007年5月に株式会社アイテマンを設立。

コメント

コメントの記入