2010-09-27 2 views
5

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

Единственное предлагаемое решение, которое я могу найти, - использовать canvas.scroll functionality.

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

Спасибо!

(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)

ответ

3

(ссылка вы вывесили дали 400 Error)

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

После того, как вы установили размер вашего композитного материала, проверьте, прокручивается ли прокрутка полосы прокруткиComposite (например, 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); 
    } 
} 

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

Редактировать: wow Я не заметил даты OP. Надеюсь, что это поможет кому-то помочь ...