Shellクラスは、ウィンドウを表現します。 それは、ウィンドウであったり、ダイアログであったりします。 SWTにおいてGUIプログラミングをするときは、常ににShellインスタンスを作成する必要があります。

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class CreateWindowDemonstrate {
public static void main(String[] args) {
// (1)
Display display = new Display();
// (2)
Shell shell = new Shell(display);
// (3)
shell.setSize(100, 100);
// (4)
shell.open();
// (5)
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
// (6)
display.dispose();
}
}
それぞれの処理が行っている内容を説明します。
(1)では、まず、Displayインスタンスを作成しています。 このDisplayクラスは、OS上のリソース管理を一元して引き受ける役割があります。 1つのSWTプログラムには、1つのDisplayインスタンスを作成します。
(2)では、Shellインスタンスを作成しています。 Shellクラスのコンストラクタの引数には、DisplayクラスまたはShellクラスのインスタンスを指定することができます。 このShellクラスは、プログラムのトップレベルウィンドウを表します。 ということで、ここで行っている操作(Shellインスタンスの作成)は、「 トップレベルウィンドウを作成するためにShellインスタンスを作成した。 そのShellインスタンスは、引数で指定されたDisplayインスタンスによってシステムリソースの管理がされている。 」というようになります。 このウィンドウは、(4)の処理で作成されます。
(3)では、(4)の処理で作成されるウィンドウのサイズを設定しています。 ここで設定する値を変更することで、表示されるウィンドウのサイズが変わります。
(5)の処理は、最も難しい部分です。 この部分は、メッセージループの処理についてされた記述です。
まず、shell.isDisposed()メソッドでは、 (4)でオープンしたウィンドウが閉じられたかどうかを取得します。 この戻り値がtrueなら閉じられていて、falseならばまだ存在します。 つまり、(4)でオープンしたウィンドウが開いている限り、whileループを続けるという命令になります。
次に、 display.readAndDispatch()メソッドの部分を説明します。 このメソッドは、OS上からイベントメッセージを取得して、 それを処理 し、trueを返します。 その際、OS上に、何もメッセージが存在しなかった場合にはfalseを返します。
display.sleep()は、何も処理すべきメッセージが存在しなかった場合に、メッセージが送られてくるまで待機します。 メッセージが送られてきた時に、このメソッドの処理が終了し、再びメッセージループが繰り返されます。
(5)の処理を要約すると、
(6)の処理の display.dispose()は、Displayインスタンスが一元的に管理していたシステムリソースを開放させる処理 です。 これは、ストリームやソケットのクローズ命令と同じようなものです。 これを怠ると、 リソース・リーク(OSが使うことのできるリソースの枯渇)が発生することがあるので、必ずdisplay.dispose()を忘れないようにします。