沙漠中的鱼

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

开发窗体控件所应当注意的几个问题

Posted on 2008-03-02 12:09 沙漠中的鱼 阅读(601) 评论(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;急盼你的回复!再次拜谢。

只有注册用户登录后才能发表评论。


网站导航: