布置父母的父母的父母

时间:2013-05-03 09:16:35

标签: java eclipse layout swt

我们有一个工具,它有一个包含多个Sections的GUI。在这些部分中,我们有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是父代的复合。父节点的父节点是节本身,节的父节点是我们的视图。它不仅看起来很愚蠢,而且当我们想要改变我们的观点时也是有问题的,因为父母的父母......可能不会是正确的父母。

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

3 个答案:

答案 0 :(得分:0)

我认为只是触发resize事件应该为你做的伎俩

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

extendedConfiguration.getShell().layout();

来源:SWT counterpart of revalidate method of SWING's JComponent