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メソッドを使う。