2014-08-12

SWT による GUI プログラミング (5) - JFace

JFace は、Wikipadia の説明を借りれば、SWT の上層に位置し、一般的な UI プログラミングタスクを制御するクラスを提供するライブラリです。SWT に Model View Controller の視点を持ち込んだものと言える、とのことですが、これはおいおいサンプルで理解していくことにします。

SWT の基本的なウィジェットのサンプルについては、しばらく更新をサボっているホームページにもっと網羅的にまとめる予定です。ブログではそろそろ JFace の話題に移りたいと思います。

JFace を利用する際のプロジェクトのビルドパス設定 (Eclipse)

JFace を利用するには、SWT のライブラリの他に、Eclipse 本体にあるライブラリを利用します。

SWT ライブラリを利用したアプリケーション開発では、SWT ライブラリをプロジェクトとしてワークスペースにインポートしておき、それを右のようにプロジェクトのビルドパスに加えて利用していました。

JFace を利用する際は、この設定に加えて下記のライブラリをビルドパスに加ます。<version info> の部分は、それぞれのライブラリのバージョン番号です。

  • org.eclipse.core.commands_<version info>.jar
  • org.eclipse.equinox.common_<version info>.jar
  • org.eclipse.jface_<version info>.jar
  • org.eclipse.osgi_<version info>.jar
  • org.eclipse.ui.workbench_<version info>.jar

プロジェクトのビルドパスの設定画面で、(バージョン番号には違いがあるかもしれませんが)ライブラリが以下のようになっていれば OK です。

これは、ライブラリの設定タブの画面で 「Add Variable ...」ボタンをクリックして、環境変数一覧が表示されたウィンドウを開き、 ECLIPSE_HOME を選択して「Extend...」ボタンをクリックして、この環境変数が差すディレクトリの中から、ライブラリ(jar ファイル)を選択します。

上述のライブラリは、全て plugins ディレクトリ内に格納されています。

JFace 版 Hello World!

bitWalk's: SWT による GUI プログラミング (2) で紹介した SWT の Label クラスのサンプル SWTAppLabel.java を JFace 用に書き直しました。

List: JFaceApp.java
package applicationwindow;

import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;

public class JFaceApp extends ApplicationWindow {
    public JFaceApp() {
        super(null);
    }

    @Override
    protected Control createContents(Composite parent) {
        Composite container = new Composite(parent, SWT.NONE);
        container.setBackground(new Color(null, 220, 220, 255));
        GridLayout gl = new GridLayout(1, true);
        gl.marginBottom = 2;
        gl.marginTop = 2;
        gl.marginLeft = 10;
        gl.marginRight = 10;
        container.setLayout(gl);
        
        Label lab = new Label(container, SWT.CENTER);
        lab.setText("こんにちは、世界!");
        lab.setBackground(new Color(null, 200, 200, 255));
        return container;
    }

    public static void main(String[] args) {
        ApplicationWindow w = new JFaceApp();
        w.setBlockOnOpen(true);
        w.open();
        Display.getCurrent().dispose();
    }
}

JFace の流儀に従って、ApplicationWindow クラスを継承したフレームワークによってウィンドウを作成していますが、SWT のウィジェットやレイアウト・マネージャをそのまま使っています。

実行例

ブログで紹介する単純なサンプルを用意する前に、具体的に機能するサンプルをいくつか作ってみて、試行錯誤をしながら理解を深めていきたいので、本トピックの続きを掲載するのには、少し間が空いてしまうかもしれません。

参考サイト

  1. JFace - Eclipsepedia

0 件のコメント: