我正在使用一个滚动的复合材料,其中包含一个复合材料,并且该复合材料包含一个标签。这整个滚动的组合是在一个 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
我的标签中使用会被包裹,但我最终会得到一个无限的垂直滚动。
它唯一有效的时间是当我对宽度进行硬编码时,我不想这样做。那么,有没有一种方法可以动态设置宽度?