可滚动复合 - 自动调整大小 - swt

dav*_*fdr 5 java swt jface eclipse-rcp

我有一个使用Scrollable Composite的应用程序窗口.

在可滚动的复合内部,我们可以有N个复合(相应的数据库数据).

我怎样才能检测到儿童复合材料的大小来设置正确的高度?

/**
 * Create contents of the application window.
 * @param parent
 */
@Override
protected Control createContents(Composite parent) {

    final ScrolledComposite sc = new ScrolledComposite(parent, SWT.V_SCROLL | SWT.BORDER);
    final Composite containerEditarAtendimento = new Composite(sc, SWT.BORDER);
    containerEditarAtendimento.setSize(800, 630);
    sc.setContent(containerEditarAtendimento);
    sc.setExpandHorizontal(true);
    sc.setExpandVertical(true);
    sc.setMinSize(containerEditarAtendimento.computeSize(820, 480));
    GridLayout gridLayout = new GridLayout(1, false);
    gridLayout.marginTop = 5;
    gridLayout.marginRight = 5;
    gridLayout.marginBottom = 5;
    gridLayout.marginLeft = 5;  
    containerEditarAtendimento.setLayout(gridLayout);
    { // Composite com as informações de atendimento.
        EditarAtendimentoComposite editarAtendimentoComposite = new EditarAtendimentoComposite(containerEditarAtendimento, SWT.BORDER);
        GridData gd_editarAtendimentoComposite = new GridData(GridData.FILL, GridData.FILL, true, false);
        gd_editarAtendimentoComposite.heightHint = 249;
        editarAtendimentoComposite.setLayoutData(gd_editarAtendimentoComposite);
    }
    {
        Composite compoExterno = formToolkit.createComposite(containerEditarAtendimento, SWT.BORDER);
        compoExterno.setLayout(new GridLayout(3, false));
        GridData gd_compoExterno = new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1);
        gd_compoExterno.heightHint = 153;
        compoExterno.setLayoutData(gd_compoExterno);

        formToolkit.paintBordersFor(compoExterno);
        {
            Label lblAnexos = formToolkit.createLabel(compoExterno, getLabel("label.anexos"), SWT.NONE);
        }
        new Label(compoExterno, SWT.NONE);
        {
            Button btnAddAnexo = formToolkit.createButton(compoExterno, getLabel("label.incluiranexo"), SWT.NONE);
            btnAddAnexo.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
        }
        { // Composite com os anexos
            AnexosComposite anexosComposite = new AnexosComposite(compoExterno,SWT.BORDER);
            GridData gd_anexosComposite = new GridData(SWT.FILL, SWT.TOP, true, false, 3, 1);
            gd_anexosComposite.heightHint = 107;
            anexosComposite.setLayoutData(gd_anexosComposite);

        }

    }
    {   // Composite onde ficará o expandable do diagnostico
        PlanoAcaoExternoComposite planoAcaoComposite = new PlanoAcaoExternoComposite(containerEditarAtendimento, SWT.BORDER);
        GridData gd_planoAcaoComposite = new GridData(GridData.FILL, GridData.FILL, true, false);
        planoAcaoComposite.setLayoutData(gd_planoAcaoComposite);
        formToolkit.adapt(planoAcaoComposite);
        formToolkit.paintBordersFor(planoAcaoComposite);
        planoAcaoComposite.layout(true, true);
        log.info("Height: {}",planoAcaoComposite.getClientArea().height);
        log.info("getSize().x: {}",planoAcaoComposite.getSize().x);
        log.info("getSize().y: {}",planoAcaoComposite.getSize().y);
        sc.setMinSize(containerEditarAtendimento.computeSize(800, 2000)); // HOW TO DYNAMICALLY SET HEIGHT?
    }
    sc.layout(true,true);
    return containerEditarAtendimento;
}
Run Code Online (Sandbox Code Playgroud)

Baz*_*Baz 13

如果减小以下代码的大小,下面的代码将根据内容进行ScrolledComposite设置minSize并显示滚动条Shell:

ScrolledComposite sc = new ScrolledComposite(content, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);

Composite composite = new Composite(sc, SWT.NONE);
composite.setLayout(new FillLayout(SWT.VERTICAL));

new Label(composite, SWT.NONE).setText("1111");
new Label(composite, SWT.NONE).setText("2222");
new Label(composite, SWT.NONE).setText("3333");
new Label(composite, SWT.NONE).setText("4444");
new Label(composite, SWT.NONE).setText("5555");
new Label(composite, SWT.NONE).setText("6666");
new Label(composite, SWT.NONE).setText("7777");

sc.setContent(composite);
sc.setExpandHorizontal(true);
sc.setExpandVertical(true);
sc.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
Run Code Online (Sandbox Code Playgroud)