SWT Shell изменить размер в зависимости от детей

я работаю над этимComposite холст, на котором другиеComposites могут быть добавлены и удалены.

Мое понимание того, как вся концепция выкладки все еще в тумане.

Когда дочерние элементы добавляются в контейнер, учитывая тот факт, что контейнер имеетGridData который заполняет родитель, не долженt родитель также знает, что размер ребенка изменился? Дочерние элементы остаются скрытыми после того, как их контейнер был размечен из-за оболочки (верхний родительский элемент).

Если вопрос слишком расплывчатый, не стесняйтесь спрашивать более подробную информацию. Кроме того, постарайтесь не указывать мне наПонимание макетов в SWT статья.

/**
 * 
 * @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++) );
    }
}

Забавный факт: Этот вопрос очень связанна этот другой, который был размещен 9 минут назад, Кто-то или экстрасенс, или преследует меня.

Ответы на вопрос(3)

Ваш ответ на вопрос