晚上好。我创建了 SWT 应用程序,它包含带有两个元素的 shell:ExpandBar 和 Button。在应用程序启动时,ExpandBar 的所有项目都被展开并且 Button 在 ExpandBar 下。我想做以下事情:通过按钮的单击折叠所有 ExpandBar 的项目,并在此操作后重绘复合。
我希望,重绘后的那个按钮发生在折叠的 ExpandBar 的正下方,但是 Button 以另一种方式思考并且不会改变它的位置。一件更有趣的事情是,在第二次单击 Button 后,所有元素的行为都变得正确。
我的源代码如下所示:
final ExpandBar bar = new ExpandBar (shell, SWT.NONE);
bar.setLayoutData(new RowData());
Button redraw = new Button(shell,SWT.PUSH);
redraw.setText("redraw");
redraw.setLayoutData(new RowData());
redraw.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
shell.layout(true,true);
Display.getCurrent().update();
for (ExpandItem item: bar.getItems())
{
item.setExpanded(false);
}
bar.redraw();
bar.update();
bar.layout(true,true);
shell.layout(true,true);
Display.getCurrent().update();
}
});
第一次点击后如何重绘合成?