2

我们有一个工具,它有一个包含多个Sections的 GUI 。在这些部分中,我们有默认情况下不展开的可扩展复合材料。当我们尝试扩展这些组合时,+变成了-,但它保持关闭:
可扩展复合材料保持关闭状态

为了解决这个问题,我尝试添加一个 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是父级的组合。parent的parent就是Section本身,Section的parent就是我们的view。它不仅看起来很愚蠢,而且当我们想改变我们的观点时也会出现问题,因为父母的父母......可能不是正确的父母。

再次布局我们的视图的正确方法是什么?如何强制 UI 绘制 ExpandableComposite 的内容?

4

3 回答 3

0

首先:尝试使您的复合组件无效。

于 2013-05-23T17:53:24.060 回答
0

我认为只需触发调整大小事件就可以为您解决问题

 parent.getParent().layout(true);
 parent.getParent().notifyListeners(SWT.Resize, null);
于 2013-05-03T14:38:34.397 回答
0

您可以对顶层窗口进行布局:

extendedConfiguration.getShell().layout();

来源:SWING 的 JComponent 的 revalidate 方法的 SWT 对应项

于 2013-05-27T14:53:10.183 回答