0

晚上好。我创建了 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();
    } 
}); 

第一次点击后如何重绘合成?

4

0 回答 0