Невозможно установить размер для прокручиваемого составного SWT

У меня есть основной композит и внутри него два прокручиваемых композита. На данный момент внутри первого прокручиваемого композита ничего нет. Второй прокручиваемый композит имеет список. Проблема в том, что, поскольку этот список большой, второй прокручиваемый композит занимает большую часть основной области композита и оставляет лишь небольшую квадратную часть для первого прокручиваемого композита. Я хочу, чтобы два прокручиваемых композита были как минимум равных размеров или один больше другого. Я не могу добиться этого, используя методы setSize() для композитов.

Код:

/** The main composite */
Composite leftComposite = new Composite(sashFormLeftRight, SWT.BORDER);
GridData leftCompositeGD = new GridData(SWT.FILL, GridData.FILL, true, false);
leftComposite.setLayoutData(leftCompositeGD);
leftComposite.setLayout(new GridLayout(1, false));

/** The first scrolled composite. Its UI elements will be filled at a later stage based on user input */
ScrolledComposite scrolledComposite = new ScrolledComposite(leftComposite, SWT.H_SCROLL | SWT.V_SCROLL);
scrolledComposite.setExpandHorizontal(true);
scrolledComposite.setExpandVertical(true);

Composite composite = new Composite(scrolledComposite, SWT.BORDER);
composite.setLayout(new GridLayout(1, true));
composite.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true));
scrolledComposite.setContent(composite);

composite.layout(true, true);
scrolledComposite.layout(true, true);
scrolledComposite.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));

/** The second scrolled composite. It has an inner composite which has a list of string names */
ScrolledComposite scrolledParamComposite = new ScrolledComposite(leftComposite, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
GridData scrolledParamCompositeGD = new GridData(SWT.FILL, GridData.FILL, true, true);
scrolledParamComposite.setLayoutData(scrolledParamCompositeGD);
scrolledParamComposite.setExpandHorizontal(true);
scrolledParamComposite.setExpandVertical(true);

Composite innerComp = new Composite(scrolledParamComposite, SWT.BORDER );
innerComp.setLayout(new GridLayout(1, true));

scrolledParamComposite.setContent(innerComp);       

/** List which fills the second scrolled composite */
List parametersListForEnv = new List(innerComp, SWT.BORDER);
ParameterName[] namesList = Types.ParameterName.values();
for (int i = 0; i < namesList.length; i++) {
    parametersListForEnv.add(namesList[i].name());
}   

innerComp.layout(true, true);
scrolledParamComposite.layout(true, true);      
scrolledParamComposite.setMinSize(innerComp.computeSize(SWT.DEFAULT, SWT.DEFAULT)); 

Пожалуйста, помогите. Заранее спасибо.


person Lishus    schedule 11.06.2015    source источник
comment
Может ли кто-нибудь помочь в этом?   -  person Lishus    schedule 12.06.2015


Ответы (1)


Ты пробовал:

GridData compositeData = new GridData(GridData.FILL, GridData.FILL, true, true);
compositeData.heightHint = // your preferred height or the height of the other composite ;
compositeData.minimumHeight = // your preferred minimum height or the height of the other composite ;

а потом

composite.setLayoutData(compositeData);

У меня была похожая проблема, и это сработало для меня.

person Gregor Valentin    schedule 28.07.2015