SWTの基礎

一つSWTアプリケーションを新規した、main()とopen()メッソドが自分で作れる。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package jp.co.casio;

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.SWT;

public class Main {

    protected Shell shell;

    /**
     * Launch the application.
     * @param args
     */
    public static void main(String[] args) {
        try {
            Main window = new Main();
            window.open();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Open the window.
     */
    public void open() {
        //初期化
        Display display = Display.getDefault();
        shell = new Shell();
        shell.setSize(450, 300);
        shell.setText("SWT Application");
        //コントロールを追加
        Button btnNewButton = new Button(shell, SWT.NONE);
        btnNewButton.setBounds(0, 10, 81, 28);
        btnNewButton.setText("New Button");
        //GUIを呼び出す
        shell.open();
        shell.layout();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
    }
}

一つSWTベースのアプリケーションは、下記のように3つの主要な部分がある。

  • ウィンドウ初期化 アプリケーションには、まずDisplayオブジェクトとShellオブジェクトを新規作成する。Displayライブラリにシステムを呼び出すことに関する方法が実装される。可視化のウィンドウを示すと、Shellオブジェクトを新規する必要がある。Shellオブジェクトはウィンドウオブジェクト。
  • コントロールを追加 Shellのウィンドオブジェクトにいろいろコントロールを追加する。コントロールは【org.eclipse.swt.widgets】と【org.eclipse.swt.custom】パッケージでボタンやテキストボックスなど。
  • GUIを呼び出す まずshell.open()メッソドを呼び出しウィンドウを開き、ウィンドウ中ですべてコントロールを示す。while() ループの内部に明示的なループを確立し、オペレーティング・システムから継続的にユーザー・イベントを読み取り、ディスパッチできるようにします。もはやイベントが得られなくなると、display.sleep() が呼ばれ、スリープ状態に入って次のイベントを待機します。

Display

  • Displayは画面全体を管理するクラスである。
  • プログラムとオペレーティングシステムの間を取り持つ
  • SWTではイベントループは明示的に記述し、Display内でイベントループを実行する。
  • イベントループの実行は、readAndDispatchメソッドで行う。
  • eclipse 3.0より前では、コンポーネントごとにイベントリスナを登録し、そこへイベントを送る。eclipse 3.0以後は、addFilterメソッドで登録したリスナでアプリケーション全体のイベントをキャッチできる。
  • ワンショットタイマ機能も有する(timerExec)。

Displayクラス無しには、SWTプログラミングは始まらない。

Shell

  • Displayオブジェクトを生成したら次に生成するオブジェクトである。Shellオブジェクトは、メインウィンドウやダイアログボックスになる。
  • このShellオブジェクトで処理するイベントは、addListenerメソッドでリスナを登録して処理する。(注意)Displayオブジェクトでは、アプリケーション全体のイベント処理を行う。
  • 矩形以外のウィンドウを設定するには、setRegionメソッドを使う。