Java SWT复合重绘问题

Java SWT复合重绘问题,java,user-interface,swt,Java,User Interface,Swt,我有一个复合元素,它最初有一个标签。现在,我在它(标签)上调用dispose,并在同一容器(compositeelm)中创建另一个标签,但我看不到新文本。这让我产生了一个问题:如何在合成上启用重画,以便新标签(或我可能创建的任何其他组件)将代替旧标签进行渲染。 下面是我的代码(分为一个单元测试,用于重新绘制一个组合) 正如您所看到的,在添加新元素后,我正在调用复合上的redraw。此外,我还验证了调用dispose后,testCell.getChildren().length会像预期的那样返回0

我有一个复合元素,它最初有一个标签。现在,我在它(标签)上调用dispose,并在同一容器(compositeelm)中创建另一个标签,但我看不到新文本。这让我产生了一个问题:如何在合成上启用重画,以便新标签(或我可能创建的任何其他组件)将代替旧标签进行渲染。 下面是我的代码(分为一个单元测试,用于重新绘制一个组合)

正如您所看到的,在添加新元素后,我正在调用复合上的redraw。此外,我还验证了调用dispose后,testCell.getChildren().length会像预期的那样返回0,并且当我创建新标签时,会得到相同的表达式返回1,从而验证新元素是否确实被添加到其父复合容器中 我在这里遗漏了什么吗?

changeText()
函数中

testCell.redraw()

该行应替换为

testCell.layout()

或者,如果要正确调整大小,应使用

shell.layout()


我会说在标签上添加selectionListener

.addSelectionListener(new SelectionAdapter() {
    @Override
    public void widgetSelected(final SelectionEvent e) {
        //Change text by Label.setText();
    }
}

很抱歉重新启动此主题,但我最近正在寻找类似问题的解决方案,此主题帮助很大,但为了调整窗口大小,我不得不使用
shell.pack()
,因为
shell.layout()
没有做任何事情。可能对某人有帮助。:)@mykola:
shell.pack()
使我的窗口变小并重新绘制,但
shell.layout()
重新绘制并保持其大小。我在
shell.open()
之后向窗口添加控件,但这些控件没有显示出来
shell.layout()
解决了这个问题。给定layout()上的javadoc,
testCell.requestLayout()会更好
.addSelectionListener(new SelectionAdapter() {
    @Override
    public void widgetSelected(final SelectionEvent e) {
        //Change text by Label.setText();
    }
}