2013-05-03 3 views
2

У нас есть инструмент, который имеет GUI, который содержит несколько Sections. В этих разделах мы имеем Expandable Composites, которые по умолчанию не расширены. Когда мы пытаемся расширить эти композиты, то + становится -, но он остается закрытым:
Expandable Composite stays closedМакет родителя родителя родителя

Чтобы это исправить, я пытался добавить ExpansionListener:

ExpandableComposite extendedConfiguration = getToolkit().createExpandableComposite(parent, TREE_NODE); 
extendedConfiguration.setLayoutData(new GridData(FILL, CENTER, true, false, 2, 1)); 
extendedConfiguration.setText("Erweiterte Einstellungen"); 
extendedConfiguration.setExpanded(false); 
extendedConfiguration.addExpansionListener(new ExpansionAdapter() { 
    @Override 
    public void expansionStateChanged(ExpansionEvent e) { 
     parent.getParent().getParent().layout(); 
    } 
}); 

Использование этого грязный бит кода, он работает, parent - это композит родителя. Родитель родительского элемента является самим Сером, родителем раздела является наш вид. Это не только выглядит глупо, но и проблематично, когда мы хотим изменить наш взгляд, поскольку родительский элемент родителя ... может не быть правильным родителем.

Каков правильный способ разметки нашего представления? Как заставить пользовательский интерфейс рисовать содержимое нашего ExpandableComposite?

+0

Вы пробовали использовать 'пакет();' вместо 'макета();'? Если вы используете org.eclipse.forms.ui.Form, вы также можете попробовать 'form.reflow (true);' вместо 'layout();' –

+0

@ jens-na: я не использую форму, это просто композит. Кроме того, pack() здесь не помогает. – looper

+0

Контент, который должен быть расширен, должен быть клиентом расширяемого композита. Например: 'extendedConfiguration.setClient (contentComposite);'. У вас что-то подобное в коде? –

ответ

0

Я думаю, просто стреляя размер события должны сделать трюк для вас

parent.getParent().layout(true); 
parent.getParent().notifyListeners(SWT.Resize, null); 
+0

Извините, но это не работает :(Ничего не происходит. – looper

0

Во-первых: попытаться аннулированию составной компонент.

Смежные вопросы