Как перерисовать композицию SWT после нажатия кнопки, чтобы изменить содержимое этой композиции - PullRequest
5 голосов
/ 27 мая 2010

Я новичок в SWT. В проекте, над которым я работаю, есть основной композит с тремя дочерними композициями. Верхний композит состоит из кнопок, а средний композит предназначен для отображения контента, а нижний - для других целей. Что должно произойти, так это то, что когда я нажимаю кнопку в верхнем композите, она должна вызвать изменение содержимого в среднем композите. это код, который я использовал для этого

public void widgetSelected(SelectionEvent e) {
    /* Retrieve the contents that are currently in middle composite*/
    Composite currentCenterComposite = EMWindow.getCenterCompsiteState();
    /* Retrieve the main composite*/
    Composite outerComposite=EMWindow.getOuterCompsiteState();
    if ((currentCenterComposite != null) && (!currentCenterComposite.isDisposed())) {
    /* Remove children that are already laid out */
    Object[] children = currentCenterComposite.getChildren (); 
    for (int i = 0; i < children.length; i++) {
 ((Composite)children[i]).dispose();
     }
    }

    currentCenterComposite = new CenterComp(currentCenterComposite);
    GridData gd_centerComposite = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
    gd_centerComposite.minimumHeight = 50;
    currentCenterComposite.setLayoutData(gd_centerComposite);
    currentCenterComposite.layout(true);
    //currentOuterComposite.layout();
    outerComposite.layout(true);
}

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

1 Ответ

6 голосов
/ 27 мая 2010

Composite.layout () = "Если получатель имеет макет , просит макет layout "

Обратите внимание, что Layout и LayoutData - это две разные вещи. LayoutData сообщает Composite, как вести себя с родителем. Макет рассказывает Composite, как устроить своих детей. В вашем случае вы НЕ устанавливаете макет для currentCenterComposite, поэтому вызов layout () не имеет никакого эффекта.

Попробуйте также установить компоновку для вашего композита.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...