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. Git 相关总结

    Git 优秀在线教程 廖雪峰-史上最浅显易懂的Git教程!

  2. JsonOperate 帮助类

    引用 Newtonsoft.Json using Newtonsoft.Json; using System; using System.Collections.Generic; using Syst ...

  3. Making my own Autonomous Robot in ROS / Gazebo, Day 2: Enable the robot

    Day 2: Enable the robot Git Setting git checkout master git branch day2_enable_robot git push --set- ...

  4. 火狐插件 Http请求利器 Httprequester

    搜索并且下载Httprequester

  5. mysql 关键字于数据库字段于关键字冲突的问题

    如果数据库存储字段 为MySQL关键字,那么在查询或者其他操作时会出错.那么我们应该怎么办, 可能有些人会说,换个字段不就好了啊.当然这样也是可以的,完全没问题. 然而,如果是在无法对数据库进行修改和 ...

  6. [3D]绘制XYZ小坐标轴

    源码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Slim ...

  7. 基于Node的PetShop,RESTful API以及认证

    前篇 - 基本认证,用户名密码 后篇 - OAuth2 认证 由于宠物店的业务发展需要,我们需要一种更加便捷的方式来管理日益增多的宠物和客户.最好的方法就是开发一个APP,我可以用这个APP来添加.更 ...

  8. Data Flow ->> Multicast

    Multicast的中文意思是组播或者多播.那自然这个组件干的事情就是可以把一份数据库输入给多少接收组件作为输入.这里有篇别人的博文讲到了Multicast的主要作用和应用场景:http://www. ...

  9. Python的map、filter、reduce函数 [转]

    1. map函数func作用于给定序列的每个元素,并用一个列表来提供返回值. map函数python实现代码: def map(func,seq): mapped_seq = []        fo ...

  10. Bootstrap迁移系列 - Navbar

    在V2.3.2版本中一个标准的导航栏模版如下: <div class="navbar"> <div class="navbar-inner"& ...