我有一个复合元素,最初有一个标签。现在我在它上面调用dispose(标签)并在同一个容器(复合榆树)中创建另一个标签,但是我看不到新文本。它让我质疑如何在组合上启用重绘,以便新标签(或任何其他可能创建的组件)将会替代旧标签。 下面是代码我有(分成单元测试重绘复合)SWT复合 - 重绘问题
private Label createLabel(Composite parent) {
Label label = new Label(parent, SWT.NONE);
label.setAlignment(SWT.CENTER);
label.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true));
return label;
}
private void changeText() {
assert testCell != null : "Please initialize test cell";
testCell.getChildren()[0].dispose();
Label l = createLabel(testCell);
l.setText("New TexT");
testCell.redraw();
}
private void draw() {
Display display = new Display();
shell = new Shell(display);
shell.setLayout(new GridLayout(2,false));
testCell = new Composite(shell,SWT.BORDER);
testCell.setLayout(new GridLayout());
Label l = createLabel(testCell);
l.setText("Old Text");
Composite btnCell = new Composite(shell,SWT.NONE);
btnCell.setLayout(new GridLayout());
Button b = new Button(btnCell, SWT.PUSH);
b.setText("Change");
b.addListener(SWT.MouseDown, new Listener() {
public void handleEvent(Event e) {
changeText();
}
});
正如你所看到的,我呼吁重绘在复合后,我加入了一个新元素。另外,我已经验证了在处理调用后,testCell.getChildren()。length返回0,如预期的那样,当我创建一个新标签时,我得到相同的表达式返回1,验证新元素确实得到添加到它的父级复合容器 我在这里错过了什么吗?
对不起重振这个话题,但我最近寻求类似的问题的解决方案,这个话题帮助了很多,但调整我的窗口,我不得不使用`shell.pack()``因为shell.layout ()`什么也没做。可能会对某人有帮助。 :) – mykola 2012-03-21 13:37:00