1

我在 SWT 中对 Canvas 进行子类化,并在构造函数内部调用 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 回答