Как сделать автоматическое обновление в ScrolledComposite SWT - PullRequest
0 голосов
/ 14 февраля 2012

У меня проблема в том, что после того, как я собрал свою оболочку и открыл ее, мне нужно добавить графические элементы в оболочку после ее открытия во время выполнения И проблема в том, что после открытия оболочки я не вижу новых графических элементов, которые были добавлены. Новые графические элементы появляются на тот случай, если я изменю размер оболочки.

Есть ли способ решить эту проблему и автоматически увидеть обновление Вот простой пример, который: 1- Я добавил 10 кнопок A в папку с вкладками и открыл оболочку. 2- Затем я добавил 10 кнопок B в оболочку 3- Я вижу кнопку B, только если изменить размер оболочки

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.graphics.Rectangle;
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 TabFolder
{

    public static void main(String[] args)
    {
        Display display = new Display();

        final Shell shell = new Shell(display);
        shell.setSize(500, 500);
        shell.setLayout(new GridLayout());
        final CTabFolder folder = new CTabFolder(shell, SWT.BORDER);
        folder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        folder.setSize(500, 500);

        CTabItem item = new CTabItem(folder, SWT.CLOSE);

        final ScrolledComposite scrollComp = new ScrolledComposite(folder, SWT.V_SCROLL | SWT.H_SCROLL);
        item.setControl(scrollComp);

        final Composite tab1Comp = new Composite(scrollComp, SWT.NONE);
        tab1Comp.setLayout(new GridLayout(1, true));
        tab1Comp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

        scrollComp.setContent(tab1Comp);
        scrollComp.setExpandVertical(true);
        scrollComp.setExpandHorizontal(true);
        scrollComp.addControlListener(new ControlAdapter()
        {
            public void controlResized(ControlEvent e)
            {
                Rectangle r = scrollComp.getClientArea();
                scrollComp.setMinSize(folder.computeSize(r.width, SWT.DEFAULT));
            }
        });

        for (int x = 0; x < 10; x++)
        {
            Button text = new Button(tab1Comp, SWT.NONE);
            text.setText("A");
        }

        shell.open();

        for (int x = 10; x < 20; x++)
        {
            Button text = new Button(tab1Comp, SWT.NONE);
            text.setText("B");
        }
        while (!shell.isDisposed())
        {
            if (!display.readAndDispatch())
                display.sleep();
        }

        display.dispose();
    }
}

Спасибо.

1 Ответ

0 голосов
/ 14 февраля 2012

Вы должны позвонить tab1Comp.layout() после добавления своих B-кнопок, потому что раскладка автоматически не обновляется после программных изменений.Вы также должны обновить минимальный размер вашего ScrolledComposite, потому что controlResized(...) также не вызывается после программных изменений.

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