トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

SWT

SWT

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)

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」を参照する形で「swtTest.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の場合は、このセパレータが「:」コロンとなりますのでご注意ください。

これで、「Hello world!!」と表示されたウィンドウがあらわれます。

Future's Laboratory 技術格納庫 2004-2013 Yutaka Yoshisaka.