2014-07-08 26 views
0

打开SWT对话框时调用shell.open()和shell.layout()是否有意义?布局和打开的顺序

使用Eclipse插件编辑,为Dialog类默认代码可以自动生成你。对于open()方法的默认代码看起来像这样:

/** 
* Open the dialog. 
* @return the result 
*/ 
public Object open() { 
    createContents(); 
    shell.open(); 
    shell.layout(); 
    Display display = getParent().getDisplay(); 
    while (!shell.isDisposed()) { 
     if (!display.readAndDispatch()) { 
      display.sleep(); 
     } 
    } 
    return result; 
} 

在该代码中,开放()发生第一,其次布局()秒。我的期望是,人们实际上希望在打开之前先布置外壳。

... 
    shell.layout(); 
    shell.open(); 
... 

我的假设,即绘图将出现一次打开()被调用,因此是低效和不必要的,因为屏幕将是绘制壳,因为它被重新排列。然而,除了效率这个理论问题之外,以任何一种顺序做这两件事之间并没有明显的区别。

默认情况下给出的是否正确,还是应该更改?这样做有好处吗?

回答

2

该图不是在open()调用中完成的,它只是将一个绘画事件添加到未决事件列表中。

排队的绘画事件将在显示屏readAndDispatch()调用循环中处理。

因此,open和的订单完成无关紧要,因为两个呼叫都在readAndDispatch呼叫之前。