(define -ayalog '())

括弧に魅せられて道を外した名前のないプログラマ

SWTなお勉強--Controlクラス

SWTのお勉強。

ちょっと不思議だったのでAPIまで調べました。

org.eclipse.swt.widgets.Control

JavaでGUIプログラミング(Control)
Class Control

不思議だったのは

他に、便利なメソッドとして、以下のものがあります。

  • public Point computeSize(int wHint, int hHint)
  • public Point computeSize(int wHint, int hHint, boolean changed)
  • public void pack()
  • public void pack(boolean changed)

ということでcomputeSize(int wHint, int hHint)について

computeSize

public Point computeSize(int wHint,
int hHint)
Returns the preferred size of the receiver.
The preferred size of a control is the size that it would best be displayed at. The width hint and height hint arguments allow the caller to ask a control questions such as "Given a particular width, how high does the control need to be to show all of the contents?" To indicate that the caller does not wish to constrain a particular dimension, the constant SWT.DEFAULT is passed for the hint.

Parameters:
wHint - the width hint (can be SWT.DEFAULT)
hHint - the height hint (can be C)
Returns:
the preferred size of the control
Throws:
SWTException -
ERROR_WIDGET_DISPOSED - if the receiver has been disposed
ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
See Also:
Layout, getBorderWidth(), getBounds(), getSize(), pack(boolean), "computeTrim, getClientArea for controls that implement them"

とどのつまりどういうことかというと引数wHint,hHintに渡したらその幅と高さでControlを生成しますよってことかな。(かなり適当)

論よりコード!!

Point p = shell.computeSize(100,100);
shell.setSize(p);

こう書いてしまうと100*100のControlができてしまいます。Shellだから多分Windowなんだけど。

Point p = shell.computeSize(SWT.DEFAULT,SWT.DEFAULT);
shell.setSize(p);

こう書くとどうなるか。サイズ指定をしないで定数SWT.DEFAULTを渡すといい感じのサイズに勝手に調整してくれます。
ただ、毎回こう書くのも冗長なので一般的には.packメソッドを使って下記のようにコンパクトにするのが普通みたい?

shell.pack();

booleanを引数に持つメソッドは意味調べてない(´・ω・`)
なんか、どうもサイズが変わったかどうかでtrueかfalseを返すみたいだけど、ちょっとよくわかんない(´・ω・`)

まぁとりあえず、いいや。すっきり♪

    • 真面目にちょっと訳すの頑張ってみたのが下の通り(意訳というか都合のいいように解釈した結果?)

レシーバの推奨サイズを返します。
コントロールの推奨サイズは、それが最大の状態で表示されるというサイズです。
呼び出し側は次のように幅のヒントと高さのヒントの引数について、質問をすることができます「ある幅のときに、コントロールを全て見せるにはコンテンツの高さがどれだけ必要か?」
呼び出し側が特定の制約を希望しないことを示すには、定数SWT.DEFAULTをヒントに渡します。