2012-04-30 34 views
2

我有一個簡單的SWT應用程序,它包含菜單和控件。我在應用程序中使用了文本和表格以及樹,我需要顯式調用dispose方法來清除當前對象,並給出在屏幕上顯示其他小部件的空間。如果小部件尚未激活,當我致電時系統崩潰處置方法。是否有更好的方法可用於處理活動的小部件,併爲另一個小部件提供空間如何高效地處理SWT中的資源。

+0

你真的需要處理它們嗎?或者你可以將它們添加到父容器並將它們從父容器中移除? – vextorspace

+0

我需要處理它們,每次只有一個小部件應該處於活動狀態。 – MinusInfinity

+0

你處理你的小部件的理由是什麼? –

回答

2

如果實際需要處理小部件,則可以保留已添加的項目列表。只處置已添加到列表中的項目。

所以我會重寫JFrame與我的主要容器類,並有一個或兩個方法將控件添加到列表。 (如果你需要他們去哪裏,你可以有你的添加控制方法傳遞以及期權類特殊控制)

class MainContainer extends JFrame { 
    private List<JComponent> currentComponents = new ArrayList<JComponent>(); 

    public void addControl(JComponent newComp) { 
     // -- add it to the JFrame -- 
     ... 

     // -- make a note that it is on -- 
     currentComponents.add(newComp); 
    } 

    public void removeControl(JComponent oldComp) { 
     // -- check if it is in the list -- 
     if (currentComponents.contains(oldComp)) { 
      // -- remove it from the JFrame -- 
      ... 

      // -- remove it from the list -- 
      currentComponents.remove(oldComp); 
     } 
    } 
} 

另外,所有組件可以被覆蓋,並與

顯示的標誌
private boolean isDisplayed(); 

方法和 private setDisplayed(boolean state); ,這樣當你進行添加時,你將顯示的狀態設置爲true,當你執行刪除操作時,只有當顯示的狀態爲真時纔會執行此操作,並且之後將狀態設置爲false。

+0

如何做? – MinusInfinity