我使用的是滚动复合材料,其中包含复合材料,复合材料包含标签。整个滚动复合都在一个jface对话框中。
我的问题是,如果没有硬编码宽度,我需要设置内部复合的大小,以便它将包裹整个标签并显示在滚动的复合内部。
以下是我的代码:
protected Control createDialogArea(Composite parent)
{
final ScrolledComposite scrolledComposite = new ScrolledComposite(parent,
SWT.H_SCROLL | SWT.V_SCROLL);
GridLayoutFactory.fillDefaults().applyTo(scrolledComposite);
GridDataFactory.fillDefaults().grab(true, true).hint(500, 400).applyTo(scrolledComposite);
scrolledComposite.setExpandHorizontal(true);
scrolledComposite.setExpandVertical(true);
scrolledComposite.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE));
final Composite innerComposite = new Composite(scrolledComposite, SWT.NONE);
GridLayoutFactory.fillDefaults().applyTo(innerComposite);
GridDataFactory.fillDefaults().grab(true, true).applyTo(innerComposite);
scrolledComposite.setContent(innerComposite);
innerComposite.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_CYAN));
messageLabel = new Label(innerComposite, SWT.WRAP);
messageLabel.setText("Some Long message");
GridDataFactory.fillDefaults().grab(true, true).applyTo(messageLabel);
scrolledComposite.setMinSize(innerComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
innerComposite.layout();
}
如果我在SWT.Default
中使用setMinSize
,我的标签就不会被包裹。如果我在parent.getClientArea().width
中使用setMinSize
,我的标签会被包裹,但最后我会得到一个无限的垂直滚动。
它唯一有效的时间是我对宽度进行硬编码,这是我不想做的。那么,有没有办法可以动态设置宽度?