我也開發控件一年了,從.net版到JAVA版,在開發這兩種不同語言控件時,我感覺語言對我們的影響不是很大,因為他們的語言都差不多,只是有一些小許的差別。在發控件的過程中,資源和效率是很重要的,特別是對于數據量很大的報表軟件,資源占用的大小和顯示的效率直接影響到產品的性能。我根據我的經驗,列出幾點需要注意的地方
1.盡量的減少控件的重畫,在重畫控件時,盡量采用局部刷新。大家在開發JAVA或.NET控件時,應當都會知道有一個設置重畫的區域范圍。如果是為自己公司產品開發的控件,可以把部份重畫的控制權提交給外面管理,來控制控件的刷新。
2.只畫可見區域,我們在開發控件過程中,不能所以有的對象畫出來,而只能把當前在窗體上可以看見的區域部份畫出來。
3.在移動或改變控件大小過程中,最好不要重畫控件,在NET中,MS提拱了在屏幕畫的ControlPaint.DrawSelectionFrame靜態方法.但是你畫第二次時,你需要在第一次重畫的區域,再重新畫一次,如果不重新畫一次,效果大家自己試試就知道。而在JAVA中,我們就不能在屏幕上畫了,但是我們也可以實現相同的效果,在SWING中我們可以重新創建一個Graphics對象,在SWT中我們可以重新創一個GC對象。他們兩種實現的思想基本上是相同,就是把當前要畫的區域把他copy下來,等畫完,馬上把當前畫的域前保存的圖又重畫上去,再重新畫另一個對象。特別是在SWT控件開發中,必須要注意的是,你把COPY區域畫完后,需要立即把那張圖片dispose。不然會占用窗體的很多句柄。會影響到其他軟件的運行.好像swt是直接調用的windows底層對象,他不能自動銷毀.
4.盡量減少資源的占用,現在機器的性能越來越好,內存也越來越大,但是他都是有限的,好像MS當時設計時的考慮就是你的機器的內存足夠大,我的程序就能很好的運行。這一點我覺得JAVA考慮的比較好。當超出內存的范圍時會出現內存溢出現像。這就不得不考慮來占用更少資源。在開發表格控件中,每一個單元格都有一個樣式,如果每一個單元格的樣式內容都是一個,但是你都是創建一個新的對像的,這樣明顯的會浪費資源和嚴重的影響到控件運行的效率,一個比較的辦法就是把那些樣式統一放在一個資源管理器里面,如果有相同的樣式,就不需要創建一個新的對像,我們就可以直接調用資源管理器里面的樣式就行了。如果我們還要達到很的性能的,我們可以設置一個資源管理器的樣式數量限制范圍。我們做項目的過程把數據導入EXCEL時,有時候樣式太多,EXCEL就會彈出一個窗體。不能加載這么多樣式。需要注意的是我們在開發swt控件時,他里面的font和color都是調用操作系統的對象,我們在用完時就需要把他dipose.但是老是對他創建和銷毀,這樣也會很嚴重影響到控件的效率。現在有一位牛人寫了一個SWT的資源管理類,寫得很不錯,大家可以直接拿來用就可以了。