1

Canvas を SWT でサブクラス化し、コンストラクタ内で pack() を呼び出すと、Canvas のサイズは 64x64 として計算されます。

クラス内にスタイルやレイアウトはありません。

  • ここでサイズはどのように計算されますか?
  • クラスのサイズを変更するにはどうすればよいですか? this.setSize()動作しません。

    public MyClass(Composite parent, int style) {
        super(parent, SWT.NONE);
        this.setBackground(getDisplay().getSystemColor(SWT.COLOR_YELLOW));

        this.computeSize(1000, 1000, true);
        this.pack();

        Point s = this.getSize();
        System.out.println(s.x); //prints 64
    }

4

3 に答える 3

3

Canvas をサブクラス化する場合は、computeSize メソッドをオーバーライドして特定の要素サイズを強制することもできます。これは、レイアウト ヒントを使用せずに他の要素を固定サイズのコンポーネントの周りに流し込む場合や、レンダリング中の画像などに基づいてキャンバス サイズを設定する場合に役立ちます。

MyCanvas クラスでは次のようになります。

public Point computeSize (int widthHint, int heightHint, boolean changed) {
  Point initialSize = super.computeSize (widthHint, heightHint, changed);
  initialSize.x = 1000;
  initialSize.y = 1000;
  return initialSize;
}
于 2012-08-22T12:23:00.870 に答える
2

サイズは指定しません。MyClass を使用するコンポーネントのレイアウトによって指定されます。

そのため、キャンバスはあらゆるサイズを処理できるようになっている必要があります。

于 2012-08-22T07:08:04.873 に答える
2

経由で必要なサイズをほのめかしてみましたGridDataか?

final GridData data = new GridData();
data.widthHint = 1000;
data.heightHint = 1000;
canvas.setLayoutData(data);
于 2012-08-22T07:09:54.750 に答える