SWT
2003.04.10 update.

SWT(Standard Widget Toolkit)とは、IBM社が推進している統合開発環境「Eclipse」 で使用されているウィジット(ボタン・チェックボックス・メニューなど)・ウィンドウ・イベントなどを 制御する、ツールキット(JavaのAPI群)です。
といっても、「Eclipse」「SWT」共に、無料で利用できます。
CPL(Common Public License)というライセンスで配布されており、これは GPLなどのオープンソースと異なり、ソース公開の義務や商用利用での制約などは ありません。自分で作ったSWTの機能を使用したアプリケーションを販売、とかもできるのです。
もちろん、フリーソフトの制作にも使えます。

Javaでは、標準のGUI制御機能として「Swing」が提供されていますが、これはJavaだけでできているため 動作速度に難があります(それでも、バージョンを重ねるごとに確実に速度アップしてきてますが)。
ところが、SWTはJavaの機能を提供するにもかかわらず、C/C++言語で作ったアプリケーションに迫る速度を出しています。
これは、SWTがOS依存のAPIを直接呼び出しているためです。
「Write Once,Run Anywhere」(一度書けばどこでも動く)というJavaのコンセプトは崩れるのですが、 OS依存の機能を呼び出すことにより、軽快な速度を引き出すことができています。

SWTは、「http://www.eclipse.org/」から ダウンロードできます。
Ver2.1では、以下のOSに対応しているようです。

Windows 98/ME/2000/XP
Linux(x86/Motif)
Linux(x86/GTK2)
Solaris 8(SPARC/Motif)
QNX(x86/Photon)
AIX(PPC/Motif)
HP-UX(HP9000/Motif)
Mac OSX (Mac/Carbon)

SWTを使用するには?

Javaアプリケーションを作るために使う機能ですので、Java(J2SE) 1.3以上が必要になります。
2003年4月現在は、SWT 2.1の場合、J2SE 1.4.1を入れるといいでしょう。
Javaは、「http://java.sun.com/」より「J2SE」を インストールするようにしてください。
また、環境変数のPATHには、Javaインストールディレクトリの「bin」を通すようにしてください。
これで、コマンドラインのカレントディレクトリがどこであってもJavaをコンパイル・実行することができるようになります。

J2SE・JREって?
J2SEとは、クライアント向けのJava2 SDK(開発キット)です。
J2SEには、JRE(Java Runtime Environment)も含まれます。
JREとは、Javaを実行するだけのプログラム群です。
例えば、システムの導入先に対し、Javaアプリケーションを入れたい場合などは 開発キットはいらないですので、JREとJavaアプリケーション本体のみを 入れるとJavaアプリケーションが動作することになります。
JREも「http://java.sun.com」よりダウンロードできます。

さて、Javaの動作確認はコマンドラインで以下のように行います。


java -version

これで、以下のようにJavaのバージョンが表示されます。
もちろん、OSやJavaのバージョンによって表示は異なることになります。

java version "1.4.1_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_01-b01)
Java HotSpot(TM) Client VM (build 1.4.1_01-b01, mixed mode)


今度は、SWTをインストールします。
インストールというよりも、解凍して必要なファイルを取り出すことになります。
SWT 2.1のWindows版の場合、「swt-2.1-win32.zip」を解凍すると、以下のようなものが 展開されます。

about.html
swt-win32-2133.dll
swt.jar
swtsrc.zip

このうち、「swt-win32-2133.dll」がJavaと各OSのネイティブコードをつなぐモジュールとなります。
これは、OSによって異なります。
「swt.jar」が、SWTのJavaのパッケージとなります。
この2つが、SWTのアプリケーション開発時と実行時に必要です。
(開発時には、DLLは参照されないのでいらないのですが)

DLLファイルは、SWTを使ったJavaアプリケーション実行時に参照される(PATHが通っている)場所か、 実行するJavaアプリケーションのあるディレクトリと同じ場所に置きます。
他OSの場合は、DLLの代わりにsoを実行時に参照される場所に置くといいです。

一番簡単なSWTのプログラムをコンパイルしてみましょう。
ウィンドウを出すだけのものです。

[swtTest.java]

import org.eclipse.swt.widgets.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.*;

public class swtTest {
  public static void main(String argv[]){

    Display display = new Display();
    Shell shell = new Shell(display);
		
    //ウィンドウのタイトルを指定
    shell.setText("swtTest");

    FillLayout layout = new FillLayout(SWT.VERTICAL);
    shell.setLayout(layout);

    Label label = new Label(shell,SWT.BORDER);
    label.setText("Hello World!!");

    //ウィンドウのサイズを指定
    shell.setSize(300,100);

    //イベントループ
    shell.open();
    while (!shell.isDisposed()){
      if (!display.readAndDispatch()){
        display.sleep();
      }
    }

    //破棄処理
    display.dispose();
  }
}


これを、以下のようにコマンドラインでコンパイルします。
まずは、ソースのあるディレクトリに移動してください。
なお、この例では「swt.jar」「swt-win32-2133.dll」は ソースである「swtTest.java」と同じディレクトリに配置しています。

そして、以下のように指定すると、 カレントにある「swt.jar」を参照する形で「setTest.java」をコンパイルする、 ということになります。


javac -classpath ./swt.jar swtTest.java
これで、何もエラーメッセージが出なければ無事にコンパイル完了です。
「swtTest.class」というファイルが生成されます。

実行は、以下のように指定します(Windowsの場合)。
これは、カレントにある「swt.jar」とカレントディレクトリ自身を参照して、swtTestを実行する、 ということになります。


java -classpath ./swt.jar;. swtTest
ここで「-classpath」の「./swt.jar;.」は、カレントの「swt.jar」と 「.」(カレントディレクトリ自身)を参照する、という指定になります。
「;」セミコロンが区切りのセパレータです。
なお、Windows以外のOSの場合は、このセパレータが「:」コロンとなりますので ご注意ください。

以下のように表示されます。


これを基礎として、このサイトではSWTの解説を進めていくことにします。