Amazon.co.jp ウィジェット SWT描画のコツ @iga
Skip to main content.

10/16 (日)

今、SWTでGUIアプリケーションを書いています。半分趣味、半分仕事で。

良くできていて使いやすいんですが、はまった箇所があるのでコツをいくつか。
仕事の話じゃないからここに書いちゃう。

(1) レイアウト
レイアウトは GridLayout が基本。Eclipse で Visual Editor を使うと、
レイアウトインターフェースを使って大変直感的に配置できる。
composite と group を惜しげもなく使うのがコツ。
また、一度作った control は他の composite に Drag&Drop では再配置できない時があるが、
ソースで createComposite() へ cut & paste して親controlを書き換えれば大丈夫。
Visual Editor がきちんと reverse parse してくれます。

(2) TreeItem へのアクセスパス
Tree から TreeItem へのアクセスパスが、画面に表示されている先頭のものだけ。
TreeItem --> 次(兄弟)のTreeItem というアクセスパスが用意されていないため、
画面に表示されている TreeItem すべてに対する処理、というものがそのままでは書けない。
なので、自分で TreeItem に対する線形リンクとアクセスマップを構成した。

(3) 描画のバッファリング
描画はダブルバッファリングしないとちらつく。
ダブルバッファリングはそのままでは用意されていないが、基本的に自分で制御すべき。
なぜなら、やらなくていいことはやらない方がいいから。
例えば、サイズが変化していなければ gc や BufferedImage は描画の度に
再作成するべきではない。逆に、サイズが変わったのであれば、dispose() --> create() しないとダメ。
変化ないのであれば、真っ白な Rectangle などの初期イメージを描画してあげれば十分。

(4) Color オブジェクト
Colorオブジェクトはなぜか静的であり、一度作ると色を変えられない。
setRGB() できればいいのに。
色設定の度に dispose() --> create() していてはたまらないので、
Colorオブジェクトをキャッシュしておく PoolFactory を作った。

(5) Menu
Menuの階層構造の作成がわかりにくかった。
Menu -> MenuItem -> MenuItem -> .... ではなくて
Menu -> MenuItem -> Menu -> MenuItem -> ... という構造となる。

canvas への描画が速い!

まだあるけど、とりあえず、以上

なんかむずかしいこと書いてあって・・・・。(^_^.)

rina - 10/16 (日) 15:07:02