TabFolder 中的 ScrolledCompsite 将内容大小调整为零

ScrolledCompsite in TabFolder sizes content to zero

我有以下问题:
我正在使用 SWT 为我的应用程序创建一个 GUI。我有一个 TabFolder,我在其中添加了几个 TabItems,并在每个 ScrolledComposite 中创建了一个包含一些内容的 ScrolledComposite

TabFolder 显示正常,但是 TabFolder 中的 ScrolledComposite 只显示第一个 TabItem 中的内容。所有其他 ScrolledComposites 本身都是可见的,但它们的内容是不可见的。

这里有一小段代码可以演示我所指的内容:

    Display display = new Display();

    Shell topShell = new Shell(display);

    topShell.setSize(800, 800);
    topShell.setBackground(display.getSystemColor(SWT.COLOR_YELLOW));
    topShell.setLayout(new FillLayout());


    TabFolder folder = new TabFolder(topShell, SWT.NONE);

    for (int i = 0; i < 5; i++) {
        TabItem item = new TabItem(folder, SWT.NONE);
        item.setText("Item " + i);

        ScrolledComposite scroller = new ScrolledComposite(folder,
                SWT.H_SCROLL | SWT.V_SCROLL );

        scroller.setBackground(display.getSystemColor(SWT.COLOR_BLUE));

        Composite content = new Composite(scroller, SWT.NONE);
        content.setBackground(display.getSystemColor(SWT.COLOR_RED));

        scroller.setContent(content);
        scroller.setExpandHorizontal(true);
        scroller.setExpandVertical(true);

        item.setControl(scroller);
    }

    topShell.setVisible(true);

    while (!topShell.isDisposed()) {
        display.readAndDispatch();
    }

如果该区域被涂成红色,则表明正在显示内容。如果内容不可见则区域为蓝色(ScrolledComposite的背景)

我不确定这是否重要,但这发生在 Linux Mint 18 上,它似乎只发生在 GTK 3 中(在 2 中它工作得很好)

经过一段时间后,我将问题归结为以下几点:
结果发现问题是 "missing" 内容的大小为零,因为布局没有设置这些内容的大小。

在我的例子中,可以通过从 ScrolledComposite 中删除 SWT.V_SCROLLSWT.H_SCROLL 样式常量来修复它。因此,上面写成下面的代码可以正常工作。

    Display display = new Display();

    Shell topShell = new Shell(display);

    topShell.setSize(800, 800);
    topShell.setBackground(display.getSystemColor(SWT.COLOR_YELLOW));
    topShell.setLayout(new FillLayout());


    TabFolder folder = new TabFolder(topShell, SWT.NONE);

    for (int i = 0; i < 5; i++) {
        TabItem item = new TabItem(folder, SWT.NONE);
        item.setText("Item " + i);

        ScrolledComposite scroller = new ScrolledComposite(folder,
                SWT.NONE);

        scroller.setBackground(display.getSystemColor(SWT.COLOR_BLUE));

        Composite content = new Composite(scroller, SWT.NONE);
        content.setBackground(display.getSystemColor(SWT.COLOR_RED));

        scroller.setContent(content);
        scroller.setExpandHorizontal(true);
        scroller.setExpandVertical(true);

        item.setControl(scroller);
    }

    topShell.setVisible(true);

    while (!topShell.isDisposed()) {
        display.readAndDispatch();
    }

虽然这会导致所有内容的大小都合适,但它会完全删除 ScrolledCompositeScrollBars,这在某种程度上不是您想要的 ScrolledComposite

有谁知道如何解决这个问题或者这是否是一个错误(可能已在较新的 SWT 版本中修复)?

几个月前我已经修复了与此相关的错误。

可以试试最新的SWT大师吗? http://download.eclipse.org/eclipse/downloads/