Java SWT复合重绘问题
我有一个复合元素,它最初有一个标签。现在,我在它(标签)上调用dispose,并在同一容器(compositeelm)中创建另一个标签,但我看不到新文本。这让我产生了一个问题:如何在合成上启用重画,以便新标签(或我可能创建的任何其他组件)将代替旧标签进行渲染。 下面是我的代码(分为一个单元测试,用于重新绘制一个组合) 正如您所看到的,在添加新元素后,我正在调用复合上的redraw。此外,我还验证了调用dispose后,testCell.getChildren().length会像预期的那样返回0,并且当我创建新标签时,会得到相同的表达式返回1,从而验证新元素是否确实被添加到其父复合容器中 我在这里遗漏了什么吗?在Java SWT复合重绘问题,java,user-interface,swt,Java,User Interface,Swt,我有一个复合元素,它最初有一个标签。现在,我在它(标签)上调用dispose,并在同一容器(compositeelm)中创建另一个标签,但我看不到新文本。这让我产生了一个问题:如何在合成上启用重画,以便新标签(或我可能创建的任何其他组件)将代替旧标签进行渲染。 下面是我的代码(分为一个单元测试,用于重新绘制一个组合) 正如您所看到的,在添加新元素后,我正在调用复合上的redraw。此外,我还验证了调用dispose后,testCell.getChildren().length会像预期的那样返回0
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();
}
}