0

我正在使用一个滚动的复合材料,其中包含一个复合材料,并且该复合材料包含一个标签。这整个滚动的组合是在一个 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().widthsetMinSize我的标签中使用会被包裹,但我最终会得到一个无限的垂直滚动。

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

4

0 回答 0