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. HTTP的长连接和短连接

        本文总结&分享网络编程中涉及的长连接.短连接概念.     关键字:Keep-Alive,并发连接数限制,TCP,HTTP 一.什么是长连接 HTTP1.1规定了默认保持长连接(HTT ...

  2. Ejabberd导入到eclipse

    ejabberd 在eclipse(erlide)中的配置.调试.运行   最近在折腾ejabberd,将ejabberd项目配置到eclipse中进行编译.调试等,现在将过程记下来,希望能帮助到需要 ...

  3. 2015-12-21(box-sizing:border-box)

    最近新学了一个方法box-sizing:border-box,可以忽略margin,padding,border等所要占的位置,比如,你在做响应式网页时,当你所做的网页宽度是符合当前电脑屏幕宽度时,但 ...

  4. EXCEL日期间隔函数

    =DATEDIF(D3,TODAY(),"M") 日期一列有逗点,有横线,excel建议日期用横杠. 首先将日期列选择日期格式. 其次通过查找替换,将.换为- 之后用=DATEDI ...

  5. javascript方法 call()和apply()的用法

    先上代码: apply()方法示例 /*定义一个人类*/ function Person(name,age) { this.name=name; this.age=age; } /*定义一个学生类*/ ...

  6. windows7 中开启无线热点

    我用的是移动的 CMCC-EDU 上网,但是这个只能在一个设备上登陆,那么问题就来了,当我电脑需要用网,手机也想要用网(不用 2/3/4G)该怎么办? 电脑操作系统:windows7 接下来是开启 w ...

  7. Javascript基础系列之(三)数据类型 (布尔型 Boolean)

    javascript同样有布尔型,可选值,true or fasle. var marr = true ; document.write(typeof(marr) + "<br> ...

  8. Android控件_使用TextView实现跑马灯效果

    一.第一种方式: 通过TextView控件的自身属性实现(但是有缺点就是当多个TextView要实现这种效果的时候,只有第一个才有效果)  实现方法加上下面四个属性: android:singleLi ...

  9. apache 开启服务器包含(SSI)技术

    SSI(server-side includes)能帮我们实现什么功能: SSI提供了一种对现有HTML文档增加动态内容的方法,  即 在html中加入动态内容 SSI是嵌入HTML页面中的指令,在页 ...

  10. 【M10】在构造方法内阻止资源泄漏

    1.类中没有指针,如果对象构造过程中出现异常,C++保证已经构造好的那一部分自动销毁.注意:这里不是调用析构方法,而是编译器在你的构造方法中插入了一些代码,保证对已经构造好的对象析构. 2.类中有指针 ...