沙漠中的魚

          欲上天堂,先下地獄
          posts - 0, comments - 56, trackbacks - 0, articles - 119
            BlogJava :: 首頁 ::  :: 聯系 :: 聚合  :: 管理

          開發窗體控件所應當注意的幾個問題

          Posted on 2008-03-02 12:09 沙漠中的魚 閱讀(611) 評論(1)  編輯  收藏 所屬分類: 控件開發
                   在開發產品和項目中一般都不可避免的使用到控件,有時候在控件選型方面也沒有找到符合自己需求的控件,那樣我們只能自己開發了。開發控件對于一個程序員的能力和思想會有很大的幫助,一個好的控件就是不斷重構和設計出來的。而且他重構時的對外部的景響不是很大。
                
          我也開發控件一年了,從.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控件時,他里面的fontcolor都是調用操作系統的對象,我們在用完時就需要把他dipose.但是老是對他創建和銷毀,這樣也會很嚴重影響到控件的效率。現在有一位牛人寫了一個SWT的資源管理類,寫得很不錯,大家可以直接拿來用就可以了。


          評論

          # re: 開發窗體控件所應當注意的幾個問題  回復  更多評論   

          2010-07-09 11:44 by 趙少輝
          沙漠中的魚:
          你好!
          今天看到你在這篇文章中寫道“在NET中,MS提拱了在屏幕畫的ControlPaint.DrawSelectionFrame靜態方法.但是你畫第二次時,你需要在第一次重畫的區域,再重新畫一次,如果不重新畫一次,效果大家自己試試就知道”,我現在就是出現了這樣的錯誤,所以能否請你詳細說明或者給予示例代碼,謝謝。
          我的EMail:zhaoshaohui2003@163.com;急盼你的回復!再次拜謝。
          主站蜘蛛池模板: 射阳县| 北海市| 石台县| 策勒县| 株洲县| 连南| 司法| 大足县| 错那县| 莆田市| 仪陇县| 邮箱| 阿拉尔市| 无极县| 台安县| 吉安县| 绩溪县| 高碑店市| 桂阳县| 凤山县| 顺昌县| 河北省| 电白县| 和田市| 沙洋县| 新巴尔虎左旗| 内黄县| 怀仁县| 连州市| 灵丘县| 广德县| 达日县| 永安市| 雷州市| 蓝田县| 杂多县| 乌苏市| 凤山市| 新营市| 科技| 股票|