课程咨询 :0535-6582277
QQ:2720475033

  • 烟台达内java培训教程

    发布:烟台达内      来源:烟台达内      时间:2016-07-18

  • Swing控件是改善为了AWT控件而发展出来的轻量级GUI控件,采用的是Composite设计模式,然而,由于没有清楚的分隔组件(Component)和容器(Container)的边界,就造成了Swing的几乎每个单独的组件都是一个容器,能够添加其他容器或者组件,看似强大的功能实际上造成了大量的问题。

    1.和人的直觉非常不一致

    Swing的GUI上的各种组件如果添加的面板过多的话,就造成各个组件的层次很深,处理类似focus管理这样的问题就很麻烦,坐标的转换也很复杂,由于父子关系过多,您不看代码只看GUI,凭直觉难以区分组件的父子关系。

    2.使用上的困扰

    Swing组件本身由于不能分清是组件还是容器,很多容器方法比如setEnabled就没有效果,需要写代码遍历所有子组件,调用所有的子组件相同的方法,而类似设置透明的方法也有这个问题,如果设置某个容器透明,也需要设置所有的子组件的透明属性,组件和容器的很多方法没有很好的定义,这对了解Swing结构的人不是问题,但是对于熟悉别的GUI类库的人就产生了很大的困惑,因为不少容器上的方法调用后是没有效果的。

    3.布局上的困难

    使用Swing开发界面的程序员会发现,即使Swing提供了这么多布局管理器,然而您想通过这些布局管理器做出很专业的界面却非常难,因为布局管理器非常依赖父容器和子组件的各种状态,尽管Swing最新的版本提供了类似组件和容器间隔的方法,然而还没有被大部分布局管理器采用,其实并不是布局管理器不够强大的问题,事实上,很多专业的界面需要从组件级别做出良好的定义,例如getPreferredSize,getMinimumSize,getMaximumSize方法,这些方法的不确定性很强,布局管理器不能过度依赖这些方法;另外,不少Swing组件会根据容器的大小进行绘制,这也造成了很多不确定性,很多人喜欢使用NullLayout,可能就是这个原因,客户需要的是一个稳定的,可预知的界面,如果使用了布局管理器,会发现界面在不同的系统下展示的不同。

    而对比不少GUI类库,您会发现他们的定义更为严格,比方javaME LCDUI类库,组件和容器是严格分开的,组件的添加是严格限制的,布局也是定义的非常严格的,没有布局管理器,类似滚动条这些支持都在底层进行了隐藏,真正减少了GUI开发者的负担。

    总得来说,对Composite设计模式应该慎用,如果一定要用,一定要良好的定义组件(Component)和容器(Container)的边界,不然很多功能会陷入没有意义的父子遍历例程,增加了复杂性,却没有带来很多好处。

    烟台达内每周周末都会推出免费试听活动,每月月底更有训练营活动,欢迎广大小伙伴们前往烟台达内参加活动,活动详情请见烟台达内官网在线咨询。

上一篇:IT从业者看网络安全行业的后续变革

下一篇:烟台达内java培训课堂:并发的处理技巧

最新开班日期  |  更多

java--名企定制班

java--名企定制班

开班日期:7月31日

java--零基础脱产班

java--零基础脱产班

开班日期:7月31日

java--在职提升班

java--在职提升班

开班日期:7月31日

java--精品业余班

java--精品业余班

开班日期:7月31日

2001-2017 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56