java---GUI编程

使用java进行GUI编程有三种方式:Applet,AWT和Swing

1。使用applet类的编程,一般用于web页面,现在已有被flash等取代的趋势,很少使用了。 

     实现方法是通过继承java.applet.Applet,并覆盖其相应的init,start, stop,destroy,paint的方法来实现的。 
2。使用awt类的编程,这一类实现的是application的应用程序,有被使用Swing类取代的趋势。 
      实现方法是通过操作一个java.awt.Frame类的实例来对gui应用程序进行页面布局,空间相应等进行控制。
主要是覆盖java.awt.Frame的 paint方法和使用java.awt.Frame本身的一些方法。 
3。使用Swing类的编程,这是目今倾向使用的application编成的方法。是对继承awt类编程的的一个改进。 实现方法是通过操作javax.swing.JFrame类的实例来实现的。如果把生成的应用程序窗口看作是相应于这个JFrame的话,则这个frame上存在一个container,可以将panel添加到这个container中。应用程序界面的控件和对控件事件相应,则是通过javax.swing.JPanel类的构造方法和actionPerformed来实现的。panel上可以添加控件。
AWT
AWT是Sun不推荐使用的工具集。然而它在许多非桌面环境如移动或嵌入式 设备中有着自己的优势。
更少的内存。它对运行在有限环境中的GUI程序的开发,是合适的。

1.更少的启动事件。由于AWT组件是本地由操作系统实现的。绝大多数的二进制代码已经在如系统启动的时候被预装载了,降低了它的启动事件。

2.更好的响应。由于本地组件由操作系统渲染。
       3.从java 1.x时代就为JRE支持的标准GUI工具集,你不用单独安装它,你不用担心平台差异的问题。

4.成熟稳定的。它能够正常工作并很少使你的程序崩溃。

缺陷:

1. 更少的组件类型。表和树这些重要的组件缺失了。它们是桌面应用程序中普遍使用的。

2.缺乏丰富的组件特征。按钮不支持图片附着。这很明显是它遵循的设 计原则造成的。

3.不支持Look And Feel。AWT被设计为使用本地组件。因此,它依赖系统来提供Look And Feel支持。如果目标系统并不支持这一特性,那么AWT将无法改变它的Look And Feel。

4.无扩展性。AWT的组件是本地组件。JVM中的AWT类实例实际 只是包含本地组件的引用。唯一的扩展点是AWT的Canvas组件,你可以从零开始创建自定义组件。然而无法继承和重用一个已有的AWT组件。

 

SWING
Swing是三者中最强大的GUI工具集。它和另外两者相比同样有自己的优劣势。

      1、丰富的组件类型。Swing提供了非常广泛的标准组件。这些组件和 SWT一样丰富。基于它良好的可扩展性,除了标准组件,Swing还提供了大量的第三方组件。许多商业或开源的Swing组件库在开发多年后都已经可以方 便地获取了。
      2、丰富的组件特性。Swing不仅包含了所有平台上的特 性,它还支持根据程序所运行的平台来添加额外特性。Swing组件特性遵循特定原则,易于扩展,因此能够提供较SWT和AWT更多的功能。
      3、好的组件API模型支持。Swing遵循MVC模式,这是一种非常成功 的设计模式。它的API成熟并设计良好。经过多年的演化,Swing组件APIs变得越来越强大,灵活和可扩展。它的API设计被认为是最成功的GUI API之一。较之SWT和AWT更面向对象,也更灵活而可扩展。
      4、出色的Look And Feel支持。MVC设计模型允许Swing分离组件视图和它的数据模型。它有高级的UI委托来将UI渲染委托给UI类。这些类被注册到一个展现特定的 Look And Feel的对象上。已经有上百个Look And Feel 可以提高各种各样的GUI风格。你甚至可以基于其他人的成果编写组件的Look And Feel 。
      5、标准的GUI库。Swing和AWT一样是JRE中的标准库。因此,你 不用单独地将它们随你的应用程序一起分发。它们是平台无关的,所以你不用担心平台兼容性。
      6、成熟稳定。Swing已经开发出来7年之久了。在Java5之后它变得 越来越成熟稳定。由于它是纯Java实现的,不会有SWT的兼容性问题。Swing在每个平台上都有相同的性能,不会有明显的性能差异。
      7、可扩展和灵活性。Swing完全在Java空间中实现。它可以控制它所需要的一起。Swing基于MVC的结构使得它可以发挥Java作为一门面向对 象语言的优势。它提供了许多扩展组件的方法。

     8、总体上良好的性能。Swing的速度是其为人诟病的一点。然而随着 JRE的开发,Swing的性能如今已经有了很大的提高。特别是Java5之后,Swing的总体速度能够接近本地小控件系统。

一个GUI的速度总是从两个方面被衡量:响应时 间和数据反馈时间。

    响应事件指从事件任务出现到组件更新UI的这段时间。例如按下一个 按钮,拖动一个组件,改变一个多标签面板等。在这个方面本地组件总能比模拟组件有更好的响应。AWT和SWT通常比Swing表现出更好的响应时间。然而 事实并非总是如此。这取决于操作系统。如果本地组件没有被良好的实现,那结果就是相反的。例如Windows开发了不错的GUI库,而Linux平台通常 差得较远。SWT可能在Windows上表现得比Swing好,而在Linux上表现得比Swing差。也就是说,AWT/SWT的性能决定于底层平台。 随着JRE的开发,Swing的响应性能能够随着JVM的优化,更好的实现方式,以及图形硬件加速而得到长足的改进。在Windows上,Java6的 Swing可以媲美SWT的性能。在非Windows环境中,Swing可以表现出更好的响应时间。
数据输送时间是指用于将应用程序数据传递给UI组件所需要的时间。例如,一个学生管理系统要求从数据库中装载学生信息并在一个表格中显示出来。 花费在从内存到表格组件的数据传递时间被称为数据输送时间.在这个方面,Swing通常比其他二者的性能更好。或许当数据量不大的情况下并不明显。但当海 量的数据被输送给表格的时候,这一点就显而易见了。为了理解这一点,提醒你注意JVM和本地操作系统是两个分离的运行时环境。由于JNI的调用在两个环境 中跨越式地发生,通常比一个普通的Java调用花费更长的时间。通常这包含两个处理。一个是Java数据结构转换为本地数据结构,另一个是方法返回时的本 地数据结构转换为Java对象。其他的性能开销暂时忽略不计。当一个大范围数组的数据从本地组件中输送过来,大量反复的JNI调用将极大地拖垮性能。

     Swing的另一个优势是它有许多的组件模型以提高输送的 性能。例如TableModel被映射为两个维度上的数组。这样,在Swing组件中甚至不需要进行数据方式的转换。Swing直接将应用程序数据显示在 屏幕上,节省了在数据转换上所花费的事件。

Swing也有不足之处:

比AWT和SWT更多的内存消耗。Swing自己实现了所有组件。因此,它在运行时装载了大量的类。一些其他的问题来源于小的可变对象的创建, 如Rectangle,Point,这些对象基于同步的考虑通常不可重用。Java在堆上创建所以对象。小的对象通常导致了额外的堆空间消耗。许多小的对 象较之大对象更难以有效地被垃圾回收。因此,Swing应用程序通常无法及时回收大而小的对象。这种情况的普遍就会导致性能下降。
更多的启动时间。现在JVM已经快得多了。许多人甚至扬言它可以媲美C++的实现。但多数的Java应用程序还是看上去很慢。实际上,Java性 能的很多问题来源于类装载机制。这是一个I/O操作,故而能够明显地降低Java应用程序的速度。也许这是每个动态链接系统中都要面对的问题吧。 Swing通常包含了上千个Swing类的使用,在Swing应用程序可以显示它的主窗口之前,它比AWT或SWT装载了多得多的类。这严重降低了 Swing的启动时间。这种问题也许会相对好一点如果Swing的类是以共享系统库的方式预加载的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值