ページ更新: 2008-03-26 (水) (3950日前)

主に eclipse 3.0.1 + WindowBuilder 2.1.0 / 3.0.1 についてのメモ。

目次

[編集]

Compositeのすべての子の有効/無効を切り替える #

2005-05-07

Compositeのすべての子の有効/無効を切り替える。

void setEnabled(Composite composite, boolean value) {
    Control[] controls = composite.getChildren();
    for (int i = 0, s = controls.length; i < s; i++) {
        Control control = controls[i];
        control.setEnabled(value);
        if (control instanceof Composite) {
            setEnabled((Composite)control, value);
        }
    }
}
[編集]

swt.jarのみでBMPからTIFF/JPEG/PNGを作成できるか? #

2005-04-27

JNIなしでできそうな気もする。ImageLoaderクラスを調べてみること。

version 3063 win32 では

  • saveメソッドのコメントでは、BMP/ICO/JPEG/GIF/PNGに対応。TIFFはない。
    • FileFormat.classではTIFFも用意されている。
    • org.eclipse.swt.internal.image.* にはnativeメソッドなし。
[編集]

ファイルに結びつけられているコマンドを実行する #

2005-03-29

The Definitive Guide to SWT and JFace, p.536, Digging into Programs, p.536, Digging into Programs より。

できそうなこと

  • ファイルを、それに結びつけられているプログラムで読み込む。
    Program.launch("index.html");
  • 拡張子から、それに結びつけられているプログラムを取得し、それを実行する。
    Program program = Program.findProgram(".html");
    program.execute("index.html");

なお、プログラム自体のパスは求められないようだ。

[編集]

swtsrc.zipからjavadocを作る #

2005-03-22

ぼ〜っとJavadocを眺めようと思う。

javadocをコマンドラインから使ったことがないので、Antでやってみる。

swt-3.0.1-win32.zipを展開し、その中のswtsrc.zipを展開して、こんなスクリプトを実行する。

<?xml version="1.0" encoding="Shift_JIS"?>
<project name="SWT" default="javadoc" basedir=".">
    <target name="javadoc">
        <javadoc
            packagenames="org.eclipse.swt.*"
            sourcepath="swtsrc"
            source="1.4"
            destdir="doc"
            access="private"
            author="true"
            nodeprecated="false"
            nodeprecatedlist="false"
            noindex="false"
            nonavbar="false"
            notree="false"
            splitindex="true"
            use="true"
            version="true"
            >
        </javadoc>
    </target>
</project>
$ ant
Buildfile: build.xml

javadoc:
  [javadoc] Generating Javadoc
  [javadoc] Javadoc execution
  [javadoc] パッケージ org.eclipse.swt のソースファイルを読み込んでいます...
    : (略) 
  [javadoc] 警告 79 個

BUILD SUCCESSFUL
Total time: 48 seconds
[編集]

各プラットフォームのswt.jarの違い #

2004-11-25

素朴な疑問。

  • swt.jarって、プラットフォームごとに内容が違うのだろうか?
  • それとも同じで、DLLやsoだけが違うのだろうか?
  • 同じだった場合、それはたまたまなのか?
  • それとも、同一になるようデザインされているのだろうか?

swt-3.0.1 の linux-gtk, macosx-carbon, win32 を調べてみた。

$ ls -lR  | egrep "^\.|jar"
.:
./swt-3.0.1-linux-gtk:
-rwx------+   1 username なし        75982 Sep 17 01:35 swt-mozilla.jar*
-rwx------+   1 username なし        50727 Sep 17 01:35 swt-pi.jar*
-rwx------+   1 username なし       906064 Sep 17 01:35 swt.jar*
./swt-3.0.1-macosx-carbon:
-rwx------+   1 username なし        41180 Sep 17 01:35 swt-pi.jar*
-rwx------+   1 username なし       828722 Sep 17 01:35 swt.jar*
./swt-3.0.1-win32:
-rwx------+   1 username なし      1128179 Sep 16 12:34 swt.jar*
  • jarの大きさが違う。
  • jarの個数も違う。
$ ls -lR  | egrep "^\.|zip"
./swt-3.0.1-linux-gtk:
-rwx------+   1 username なし        86321 Sep 17 01:35 swt-mozillasrc.zip*
-rwx------+   1 username なし       139951 Sep 17 01:35 swt-pisrc.zip*
-rwx------+   1 username なし       841752 Sep 17 01:35 swtsrc.zip*
./swt-3.0.1-macosx-carbon:
-rwx------+   1 username なし       108171 Sep 17 01:35 swt-pisrc.zip*
-rwx------+   1 username なし       814601 Sep 17 01:35 swtsrc.zip*
./swt-3.0.1-win32:
-rwx------+   1 username なし      1195637 Sep 16 12:34 swtsrc.zip*
  • srcの大きさが違う。
  • srcの数も違う。(jarに対応)
  • DLLやsoは、動作環境特有のWidgetへのアクセスを確保
  • SWT*.jarは、そのWidgetを使って実装されているので、OSごとに内容が異なる。

tree_swt-3.0.1-linux-gtk.png tree_swt-3.0.1-macosx-carbon.png tree_swt-3.0.1-win32.png

[編集]

JVM オプション #

-Djava.library.path=path/to/library
[編集]

GraphicsMagick が作った白黒BMPをSWTで読み取れない #

カラーの場合は読み取れる。

白黒の場合は、例外が発生する。

IrfanViewer では見ることができる。

  • ImageMagick のBMPのグレイスケール出力は Run length Encoding を使っている。
  • 〃カラーでは、BMPのカラー出力は非圧縮。SWTでも読み取れる。
  • JPG, PNG では圧縮/非圧縮とも変化なし。しかも、SWTで読み取れる。

次のように、圧縮しないと SWT で読み取れる。

$ gm convert -compress None -crop 256x256+0+0 lenagray.bmp ok.bmp

GraphicsMagick 1.0.6-1 と ImageMagick 6.0.4-1 の双方とも、読み込めない。

$ gm convert -crop 256x256+0+0 lenagray.bmp bad.bmp
$ convert -crop 256x256+0+0 lenagray.bmp bad2.bmp
[編集]

ドロップダウンリストの大きさは変えられないのか? #

ドロップダウンリストで表示されるウィンドウの大きさを 大きくしたいが、SWT Designer には特に設定項目はない。

追加

Comboであれば、setVisibleItemCount(int) で変更できる。たぶんリストもできると思う。

[編集]

デフォルトボタンを設定する #

リターンを押したときに押されたとみなされるボタンの設定は、 Shell#setDefaultButton(Button)を使う。

なお、WindowBuilder 3.0.0GAでは、この設定をデザイナではできないので、 手動でコードを追加すること。

[編集]

Window を ESC で閉じるには? #

SWT.PRIMARY_MODAL や SWT.APPLICATION_MODAL であれば、ESCで閉じる。

shell = new Shell(parent, SWT.CLOSE | SWT.PRIMARY_MODAL);

そうではない場合は、次のようにすればできるかもしれない。

  • Button#setAccelerator が存在しないので、
  • Shell の keyReleased で shell.close() を呼ぶ。
shell = new Shell();
shell.addKeyListener(new KeyAdapter() {
	public void keyReleased(KeyEvent e) {
	if (e.keyCode == SWT.ESC) {
		close();
	}
	}
});
[編集]

WindowBuilder で イベントハンドラをメソッドにする #

Preference - CodeGeneration - EventHandlers で可能。

ただし Delphi と異なり、メソッドには引数は渡されない。

[編集]

SWT.TOGGLE #

WindowBuilder 2.0.1 のデザイナは Buttonの SWT.TOGGLEを置けないみたい。 動作確認はできるが。

SWT.TOGGLE については、SWT本 p.194 を参照。

[編集]

ラベルと他のWidgetの結びつけ #

ラベルとアクセラレータの結びつけはどうするのか?

  • 直後のWidget が選択された。(Label -> Text)
  • Group は結び付けられないみたい。Radio や Check にアクセラレータを設定すること。