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

时间:2017-08-12 19:58:43

标签: java tabs swt scrolledcomposite

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

TabFolder显示正常,但ScrolledComposite中的TabFolder仅显示第一个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中它工作得很好)

经过一段时间后,我将问题追溯到以下几点:
事实证明,问题是“缺失”内容的大小为零,因为布局没有设置那些大小。

在我的情况下,可以通过从SWT.V_SCROLL中删除SWT.H_SCROLLScrolledComposite样式常量来修复它。因此,上面编写的代码按预期工作。

    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();
    }

尽管这会导致所有内容的大小合适,但它会完全删除ScrollBars的{​​{1}} ScrolledComposite,这ScrolledComposite不是您想要的softmax_cross_entropy_with_logits

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

1 个答案:

答案 0 :(得分:0)

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

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