2014-07-08 25 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呼叫之前。