Java界面设计的用途

开发者可以通过Java SE开发丰富并且强大的具有图形界面的桌面应用程序。也可以设计一些提高效率的工具软件,帮助自己处理机械性工作。

Java 的图形界面工具包,可以用于工具类软件开发、管理类软件开发、通用客户端开发、银行客户端软件开发、Eclipse 插件开发等方向。在许多知名的大型软件中,都能够见到 Java 的身影,如某些版本的 Photoshop、思维导图软件、Eclipse、IDEA 开发环境等。

Java有多套GUI工具包,因为没有一个可以满足所有的要求。 Java的GUI工具包包含AWT, Swing和SWT,每个工具包都有各自的优缺点,开发者可以根据自己的需求和目标来选择适当的工具包。

AWT 简介

Abstract Windows Toolkit(AWT)是最原始的 Java GUI 工具包。AWT的主要优点是,它是每个Java版本的标准配置,包括早期的Web浏览器中的Java实现;并且非常稳定。这意味着我们不需要单独安装这个工具包、在任何一个Java运行环境中都可以使用它。

它是一个非常简单的具有有限 GUI 组件、布局管理器和事件的工具包(如窗体、文本标签、按钮、菜单等)。这是因为Sun公司决定为AWT使用一种最小公分母的方法,只提供所有操作系统都有的控件。因此它只会使用为所有Java主机环境定义的GUI组件。

由于AWT要依赖于主机GUI的对等体(peer)控件(其中每个AWT组件都有一个并行的主机控件或者对等体)来实现这个GUI,这个GUI的外观和行为在不同的主机上会有所不同。这与Java的“一次编写,处处运行”理念冲突,所以AWT有局限性。

Swing 简介

Java Swing 是 Java Fundation Classes ( JFC ) 的一部分,它试图解决AWT的缺点。在 Swing 中,Sun 开发了一个经过仔细设计的,灵活而强大的GUI工具包。Swing 是在 AWT 组件基础上构建的。Swing 使用了  AWT 的事件模型和支持类,例如 Colors、Images 和 Graphics。Swing 组件、布局管理器以及事件比  AWT 提供的组件集更为广泛,完全满足各种开发需求。

为了克服在不同主机上行为也会不同的缺点,Swing 对主机控件的依赖性降至了最低。实际上,Swing只为诸如窗口和框架之类的顶层组件使用对等体, 好像是JFrame,JWinodows,JDialog(记不太清了,好像是这几个)是调用本地操作系统的控件。大部分组件( JComponent 及其子类)都是使用纯Java代码来模拟的。这意味着Swing天生就可以在所有主机之间很好地进行移植。因此,Swing通常看起来并不是本地程序。实际上,它有很多外观,有些模拟不同的主机外观,有些则提供了独特的外观。

Swing 对基于对等体的组件使用的术语是重量级(Heavyweight),对于模拟的组件使用的术语是轻量级(llightweight)。实际上,Swing 可以支持在一个GUI中混合使用重量级组件和轻量级组件,例如在一个 JContainer 中混合使用AWT和Swing控件。 Swing 具有以下优势:

  基于 MVC 结构

  可编程外观

  呈现器与编辑器

  支持以任意顺序构建 GUI

  可访问性

  支持自动销毁

  是标准 Java 的一部分

SWT 简介

IBM更喜欢AWT的实现机制,做出了SWT,SWT采用的是最大公倍数的做法。SWT大部分都是用的本地操作系统的控件,一些在windows里有的控件可能在linux下没有,对这种控件才采用自己绘制的方式。SWT采用类似JAVA虚拟机的方式,在不同的平台,有不同的开发包,我们写的java代码是一样的,但不同平台下看起来外观是不一样的,但性能提升很高,据说和C++做的界面速度差不多:)

SWT 也是基于对等体实现的,在这点上与 AWT 相似。它克服了 AWT 所面临的 LCD 的问题,方法如下:它定义一组控件,它们可以用来构建大部分办公应用程序或者开发者工具,然后可以按照逐个主机的原则,为特定主机所没有提供的空间创建模拟控件(这与 Swing 类似)。对大部分现代主机来说,几乎所有的控件都是基于本地对等体的。这意味着基于 SWT 的 GU I既具有主机的外观,又具有主机的性能。这样就避免了使用 AWT 和 Swing 而引起的大部分问题。特定的主机具有一些低级功能控件,因此 SWT 提供了扩充(通常是模拟的)版本(通常使用 “C” 作为名字中的第一个字母),从而可以产生更一致的行为。

在SWT中,对等体只是主机空间上的一些封装程序而已。这意味这SWT应用程序实际上是一个主机应用程序,它必然会全部继承主机的优缺点。这还意味着SWT不能完全实现 “一次编写,处处运行” 的目标;它更像是一种 “一次编写,处处测试” 的解决方案。这就是说,SWT景观不如Swing那么优秀,但是它在创建可移植解决方案方面是杰出的。SWT具有以下特点:

  不支持GUI自动销毁

  仅支持自顶向下构建GUI

  对Java2D的支持不够完善

  不属于标准Java的一部分

使用哪一个GUI工具包?

Swing是最灵活,强大的GUI工具包,所以在界面开发中,首选Swing, 他可以胜任绝大多数开发工作。

只有一种场合不适用于Swing: 在使用SWT开发的程序上继续编写界面,比如为Eclipse开发插件(因为Eclipse是基于SWT构建的)。SWT与Swing不兼容,它们不能混合使用。

引一名话:this is equivalent to asking whether a harmmer is better than a screw driver,of course ,a hammer wieldded with sufficient force can probably drive a screw into a wall ,and the butt of a screw can be used in a pinch to knock in a nail. However, a good carpenter keeps both harmer and screw drivers in her tool box and will use the tool that is appropriate for the job at hand.

个人感觉以前 Java 做界面完全没有优势,从外观到性能(我很喜欢Swing的look and feel,可以改变风格),SWT的出现改变了性能上的缺点,再加上JFace,及Eclipse的RCP,我还是倾向于用SWT。

Java界面设计 Swing(1)的更多相关文章

  1. 11-Java 界面设计

    (一)Java界面设计概述 1.Java 界面设计的用途 2.AWT 简介 (1)Abstract Windows Toolkit 是最原始的工具包. 3.Swing 简介 4.SWT 简介 5.如何 ...

  2. java(课程设计之记事本界面部分代码公布)

    代码:涉及记事本的一些界面......!! /* *java课程设计之记事本(coder @Gxjun) * 编写一个记事本程序 * 要求: * 用图形用户界面实现. * 能实现编辑.保存.另存为.查 ...

  3. 转:二十七、Java图形化界面设计——容器(JFrame)

    转:http://blog.csdn.net/liujun13579/article/details/7756729 二十七.Java图形化界面设计——容器(JFrame) 程序是为了方便用户使用的, ...

  4. 三十二、Java图形化界面设计——布局管理器之CardLayout(卡片布局)

    摘自 http://blog.csdn.net/liujun13579/article/details/7773945 三十二.Java图形化界面设计--布局管理器之CardLayout(卡片布局) ...

  5. 二十七、Java图形化界面设计——容器(JFrame)

    摘自http://blog.csdn.net/liujun13579/article/details/7756729 二十七.Java图形化界面设计--容器(JFrame) 程序是为了方便用户使用的, ...

  6. 三十三、Java图形化界面设计——布局管理器之null布局(空布局)

    摘自http://blog.csdn.net/liujun13579/article/details/7774267 三十三.Java图形化界面设计--布局管理器之null布局(空布局) 一般容器都有 ...

  7. Java图形化界面设计——容器(JFrame)

    Java图形化界面设计——容器(JFrame) 程序是为了方便用户使用的,因此实现图形化界面的程序编写是所有编程语言发展的必然趋势,在命令提示符下运行的程序可以让我们了解java程序的基本知识体系结构 ...

  8. 三十一、Java图形化界面设计——布局管理器之GridLayout(网格布局)

    摘自http://blog.csdn.net/liujun13579/article/details/7772491 三十一.Java图形化界面设计--布局管理器之GridLayout(网格布局) 网 ...

  9. Java图形化界面设计——中间容器(Jpanel)

    1.  将组件添加到JFrame中 方式之一: frame.getContentPane().add(childComponent) 用getContentPane()方法获得JFrame的内容面板, ...

随机推荐

  1. .NET DateTime类型变量作为参数时设置默认值

    一个小的 Tips. .NET 中函数参数的默认值需要是编译时常量.如果参数是引用类型,可以设置Null,如果是值类型,可以设置相应的编译时常量,如整型可以用整数,但对于DateTime(结构体,值类 ...

  2. mui学习记录

    1.页面间传值 2.mui如何增加自定义icon图标 http://ask.dcloud.net.cn/article/128 3.设计基于HTML5的APP登录功能及安全调用接口的方式(原理篇) h ...

  3. DatePickerDialog、AutoCompleteTextView

    DatePickerDialog选择日期,调用showDialog(int id)方法,会执行onCreateDialog方法: @Override protected Dialog onCreate ...

  4. WPF,Silverlight与XAML读书笔记第四十三 - 多媒体支持之文本与文档

    说明:本系列基本上是<WPF揭秘>的读书笔记.在结构安排与文章内容上参照<WPF揭秘>的编排,对内容进行了总结并加入一些个人理解. Glyphs对象(WPF,Silverlig ...

  5. JS获取子窗口中返回的数据

    在开发的时候,遇到了这样一个问题,客户填写自己的收货地址,可以新建,但同时也可以选择之前填写的,由于我们的客户本身就是商户,地址繁多,把它之前的地址简单用个下拉框罗列出来显然不合适,并且客户要求能够对 ...

  6. iOS 滑动性能优化

    iOS 滑动性能优化 目录 一. 减少图层的Blend操作 1. UIView的背景色避免使用clearColor 2. 控件贴图避免使用带alpha的图片 3. UIImageView 使用时避免半 ...

  7. strcpy C++实现

    #include <iostream> #include <assert.h> using namespace std; char *strcpy(char *strDest, ...

  8. ASP.NET Redis 开发 [转]

    Redis简介 Redis是一个开源的,使用C语言编写,面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高并发的应用场景.Redis纯粹为应用而产生,它是一个高性能的 ...

  9. NSString 的 compare 方法

    - (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange ...

  10. 二级联动banner【墨芈原创,大神勿喷】

    这个banner效果在几个月前都做了,不过因为代码添乱,而且不宜调用就没发布,经过2周时间间间断断的编写,插件终于搞定了,除框架外其它都开源发布,至于框架没给源码是因为还没做好,后期做好了也会发布出来 ...