滚动复合内的SWT标签不会动态包装

时间:2017-07-18 18:53:00

标签: java label swt scrolledcomposite

我使用的是滚动复合材料,其中包含复合材料,复合材料包含标签。整个滚动复合都在一个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,我的标签会被包裹,但最后我会得到一个无限的垂直滚动。

它唯一有效的时间是我对宽度进行硬编码,这是我不想做的。那么,有没有办法可以动态设置宽度?

0 个答案:

没有答案