SWT Shell zmienia rozmiar w zależności od dzieci

Pracuję nad tymComposite płótno, na którym inneComposites mogą być dodawane i usuwane.

Moje zrozumienie, jak cała koncepcja układania jest nadal we mgle.

Kiedy dzieci są dodawane do kontenera, biorąc pod uwagę fakt, że kontener maGridData co wypełnia rodzica, czy rodzic nie powinien wiedzieć, że dziecko zmieniło rozmiar? Dzieci pozostają ukryte po rozłożeniu ich pojemnika, ze względu na powłokę (górny rodzic).

Jeśli pytanie jest zbyt niejasne, nie wahaj się poprosić o więcej szczegółów. Postaraj się też, abyś nie wskazywał miZrozumienie układów w SWT artykuł.

/**
 * 
 * @author ggrec
 *
 */
public class SSCCE
{

    // ==================== 2. Instance Fields ============================

    private Composite componentContainer;

    private int componentCount = 0;

    // ==================== 3. Static Methods =============================

    public static void main(final String[] args)
    {
        new SSCCE();
    }

    // ==================== 4. Constructors ===============================

    private SSCCE()
    {
        final Display display = new Display();
        final Shell shell = new Shell(display);
        shell.setLayout(new GridLayout(1, false));

        createContents(shell);

        shell.pack();
        shell.open();
        while (!shell.isDisposed())
        {
            if (!display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }

    // ==================== 5. Creators ===================================

    private void createContents(final Composite parent)
    {
        parent.setLayout(new GridLayout());
        parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        final Button button = new Button(parent, SWT.PUSH);
        button.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
        button.setText("Add New Component");

        button.addSelectionListener(new SelectionAdapter()
        {
            @Override public void widgetSelected(final SelectionEvent e)
            {
                addNewComponent();

                componentContainer.layout();
            }
        });

        componentContainer = new Composite(parent, SWT.BORDER);
        componentContainer.setLayout(new GridLayout());
        componentContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    }

    // ==================== 6. Action Methods =============================

    private void addNewComponent()
    {
        final Composite component = new Composite(componentContainer, SWT.BORDER);
        component.setLayout(new FillLayout());
        component.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

        final Label label = new Label(component, SWT.NONE);
        label.setText( String.valueOf(componentCount++) );
    }
}

Śmieszny fakt: To pytanie jest bardzo powiązanedo tego innego, który został opublikowany 9 minut temu. Ktoś jest albo psychiczny albo mnie prześladuje.

questionAnswers(3)

yourAnswerToTheQuestion