重绘SWT动态对象

时间:2012-07-23 15:08:55

标签: java swt composite redraw mouse-listeners

晚上好。 我创建了SWT应用程序,它包含两个元素的shell:ExpandBar和Button。 在应用程序启动时,ExpandBar的所有项目都会展开,Button会在ExpandBar下。我想要执行以下操作:在此操作之后,通过Button的单击和重绘复合来折叠所有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();
    } 
}); 

第一次点击后如何重新绘制复合材料?

0 个答案:

没有答案