为什么 setSize 方法需要在 SWT 中显示 Composite 上的滚动条?

Why is setSize method necessary to show scroll on Composite in SWT?

我正在努力使用 JAVA SWT 创建 UI。

有一件事让我对使用 ScrolledComposite 感到困惑。 为什么我的代码在没有设置 Composite 的 MinSize 的情况下不显示滚动条?

谁能解释一下 setMinSize 在 ScrolledComposite 中的作用?

为什么我们不能使用 "setSize" insetead of "setMinSize"?

下面是我的代码。

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;


public class MyPractice {

public static void main(String[] args) {

    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new GridLayout());

    final ScrolledComposite sc = new ScrolledComposite(shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
    sc.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

    Composite c = new Composite(sc, SWT.NONE);
    c.setLayout(new GridLayout(7, true));
    c.setBackground(new Color(display, 0,255,0));

    for (int i = 0; i < 200; i++) {
      Button b = new Button(c, SWT.PUSH);
      b.setText("Button " + i);
    }

    sc.setContent(c);
    sc.setExpandHorizontal(true);
    sc.setExpandVertical(true);


    //*****Why is this code necessary to get Scroll on UI?
    sc.setMinSize(c.computeSize(SWT.DEFAULT, SWT.DEFAULT));

    //Why can't we use "setSize" insetead of setMinSize? setSize does not show scroll. 
    //sc.setSize(c.computeSize(SWT.DEFAULT, SWT.DEFAULT));


    shell.setSize(300, 500);
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    display.dispose();

}
}

setSize()setMinSize() 是两个截然不同的函数。 Control#setSize() 设置 Control 的实际大小,而 ScrolledComposite#setMinSize() 特定于 ScrolledComposite 并告诉它从哪个大小开始显示滚动条:

Specify the minimum width and height at which the ScrolledComposite will begin scrolling the content with the horizontal scroll bar. This value is only relevant if setExpandHorizontal(true) and setExpandVertical(true) have been set.

滚动合成的最小尺寸将基于 child 的尺寸。