SWT Композитный максимальный размер

У меня есть ScrolledComposite, содержимое которого усекается. Я погуглил и знаю, что это известная проблема в Windows.

Единственный предлагаемый обходной путь, который я могу найти, — это использовать функциональность canvas.scroll.

Учитывая возраст проблемы, мне было интересно, есть ли более приятный обходной путь?

Спасибо!

(EDIT: на момент написания ссылка была: http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet48.java?view=markup&content-type=text%2Fvnd.viewcvs-markup&revision=HEAD)


person Craig    schedule 27.09.2010    source источник


Ответы (1)


(ссылка, которую вы разместили, дала ошибку 400)

Не уверен, что моя проблема была такой же, но я также столкнулся с проблемой усечения с помощью ScrolledComposite. Проблема заключалась в том, что когда я изменил размер Composite для прокрутки и полоса прокрутки стала видимой, элементы управления не учитывали пространство, занимаемое полосой прокрутки. Чтобы решить эту проблему, я добавил своего рода рекурсивный фрагмент кода в свой прослушиватель Resize на прокручиваемом композите:

После того, как вы установили размер композитного контента, проверьте, стала ли видимой полоса прокрутки scrolledComposite (например, getVerticalBar()). Если это так, отправьте новое событие Resize вашему слушателю. Вот фрагмент моего кода...

public void handleEvent(Event event)
{
    int newWidth = scrolledComposite.getSize().x;
    boolean hasScroll = false;
    ScrollBar scrollBar = scrolledComposite.getVerticalBar();
    if (scrollBar.isVisible())
    {
        hasScroll = true;
        newWidth -= scrolledComposite.getVerticalBar().getSize().x;
    }
    newWidth -= 8;
    Point size = contentComposite.computeSize(newWidth, SWT.DEFAULT);
    contentComposite.setSize(size);

    int scroll_multiplier = size.y / 50;
    scrollBar.setIncrement(scroll_multiplier);

    /**
     * If the scroll bar became visible because of the resize, then
     * we actually need to resize it again, because of the scroll
     * bar taking up some extra space.
     */
    if (scrollBar.isVisible() && !hasScroll)
    {
        scrolledComposite.notifyListeners(SWT.Resize, null);
    }
}

Надеюсь это поможет!

Редактировать: вау, я не заметил дату ОП. Надеюсь, это в конечном итоге поможет кому-то в любом случае...

person Dylan    schedule 22.02.2011