2012-08-22 51 views
1

我在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 
    } 
 

回答

2

你不给自己的尺寸:它是通过使用你的MyClass的组件的布局给出。

所以你的画布应该可以处理任何尺寸。

2

您是否试过通过GridData暗示预设尺寸?

final GridData data = new GridData(); 
data.widthHint = 1000; 
data.heightHint = 1000; 
canvas.setLayoutData(data); 
2

如果您是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; 
} 
+0

不幸的是'computeSize'绝不会为我的情况。如果它很重要 - 我将我的Canvas实例插入到由FormLayout控制的Shell中 – Skip

+1

有两种computeSize方法,一种是布尔型的,另一种没有,但是在玩测试应用程序时,我总是得到Composite的版本,这是布尔值。我看到computeSize被调用:shell.open(),shell.layout()和shell.pack()。你不应该像上面你的MyCanvas构造函数那样需要任何size方法(computeSize,pack等)。相反,尝试在shell上调用它(布局或包)。 – BenG

+0

非常感谢,现在我终于找到了,复合材料的大小在哪里计算! – Skip