Как реализовать оболочку динамического размера с ScrolledComposite в SWT затмения?

Я создал оболочку и добавил к ней ScrolledComposite, которая содержит текст в качестве содержимого. Но я хочу, чтобы оболочка динамически изменяла размер в зависимости от размера контента. Моя реализация заключается в следующем

    shell.setLayout(new GridLayout(1,true));
    ScrolledComposite sc = new ScrolledComposite(shell, SWT.V_SCROLL|SWT.H_SCROLL);
    sc.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).hint(200, 200).create());  

    sc.setExpandHorizontal(true);
    sc.setExpandVertical(true);

    Composite top = new Composite(sc,SWT.NONE);
    top.setLayout(GridLayoutFactory.swtDefaults().numColumns(1).create());

    StyledText styledText = new StyledText(top, SWT.NONE);
    styledText.setText(text);

    StyleRange style = new StyleRange();
    style.start = 0;
    style.length = text.indexOf(":"); //$NON-NLS-1$
    style.fontStyle = SWT.BOLD;     
    styledText.setStyleRange(style);    


    sc.setContent(top);
//  shell.setSize(sc.computeSize(SWT.DEFAULT, SWT.DEFAULT));
    sc.setMinSize(top.computeSize(SWT.DEFAULT, SWT.DEFAULT));

    sc.pack(true);
    shell.setVisible(true);

Когда я раскомментирую закомментированную строку в приведенном выше коде, оболочка изменяет размеры в зависимости от содержимого, но в этом случае не может достичь полосы прокрутки.

Я также хочу получить полосу прокрутки, если содержание выходит за определенные рамки. Если содержание находится в пределах ограничения, я не хочу, чтобы в оболочке было дополнительное пустое пространство.

Может кто-нибудь помочь мне здесь??

1 ответ

Решение

StyledText поддерживает саму прокрутку, нет необходимости использовать ScrolledComposite:

Shell shell = new Shell(display, SWT.SHELL_TRIM);

shell.setLayout(new GridLayout());

StyledText text = new StyledText(shell, SWT.V_SCROLL | SWT.H_SCROLL);

text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

text.setText(....);

shell.layout();

Point size = shell.computeSize(SWT.DEFAULT, SWT.DEFAULT);

shell.setSize(Math.min(size.x, 100), Math.min(size.y, 100));

shell.open();

Вместо того, чтобы использовать shell.pack() просто позвони shell.layout а потом shell.computeSize чтобы увидеть, какой будет размер без прокрутки. Отрегулируйте размер, если он слишком большой, и вызовите shell.setSize,

Другие вопросы по тегам