天天看點

MDI子視窗間的資料共享

聲明:本文章中介紹的内容可以在GPF項目中找到相應的實作。

MDI的子視窗間的資料共享是在設計MDI程式是應當注意的問題。作為MDI程式的GPF,在設計時也需要考慮這一點。

GPF中,對于一些繪圖工具的設定,可以設定成全局性的。也就是說,當視窗1點選“繪制直線”按鈕時,視窗2目前的操作同樣更改為“繪制直線”。這時,就有兩種方法實作,一個是“送出去”,一個是“取過來”。

所謂“送出去”,是指的由主程式将更改的資料送發給各個子視窗。比如如下的代碼:

//... 

currentColor = newColor; 

JInternalFrame[] frames = jDesktopPane.getAllFrames(); 

for(JInternalFrame iframe : frames){ 

    iframe.setColor(currentColor); 

//...

這段代碼很清楚,當屬性currentColor改變時,首先擷取目前JDesktopPane中所有的JInternalFrame,然後利用循環依次設定。這個可以稱作“送出去”,是有主程式發送給内部子視窗各個資料的。

另外一個是“取過來”,意思是由子視窗去擷取最新資料。當子視窗被選擇時,它才需要擷取最新資料,進而執行相應的操作。是以,根據這一思路,我們将子視窗的isSelected方法進行重寫:

// in child class of JInternalFrame 

class InnerFrame extends JInternalFrame { 

    //... 

    Color innerColor; 

    @Override 

    public boolean isSelected(){ 

        if(isSelected) { 

            innerColor = currentColor; 

        } 

        return isSelected; 

    } 

}

這裡,我們重寫了JInternalFrame的isSelected方法,根據繼承來的isSelected屬性進行設定,當isSelected為true時,更新自身的屬性,這就實作了主動“取過來”獲得資料的方法。

當然,這并不一定是最好的方法,但是個人覺得還是簡單可行的。在早版本的GPF中使用的是第一種“送出去”的方法,結果存在大量的循環代碼,而在新版本中,則使用了“取過來”方法,比起前一版本更加簡單可行。

本文轉自 FinderCheng 51CTO部落格,原文連結:

http://blog.51cto.com/devbean/92925

繼續閱讀