Java界面设计 Swing(1)
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)的更多相关文章
- java界面设计(swing)
1.Swing基本组件 窗体控件 JFrame.容器控件 JPanel .标签控件 JLabe.按钮控件 JButton.文本框控件 JTextField 与 JTextArea(注意JScrollP ...
- Java界面设计
---------------siwuxie095 Java SE(Java Standard Edition) 即 Java 标准版, 一般也 ...
- java oop第14章_Swing(Java界面设计)
一. Swing相关的概念: 1. GUI:(Graphical User Interface):图形化用户界面,通过图形化的方式提供与用户交互的平台,向用户展示信息.收集用户提交的数据. 2. ...
- 11-Java 界面设计
(一)Java界面设计概述 1.Java 界面设计的用途 2.AWT 简介 (1)Abstract Windows Toolkit 是最原始的工具包. 3.Swing 简介 4.SWT 简介 5.如何 ...
- java(课程设计之记事本界面部分代码公布)
代码:涉及记事本的一些界面......!! /* *java课程设计之记事本(coder @Gxjun) * 编写一个记事本程序 * 要求: * 用图形用户界面实现. * 能实现编辑.保存.另存为.查 ...
- 转:二十七、Java图形化界面设计——容器(JFrame)
转:http://blog.csdn.net/liujun13579/article/details/7756729 二十七.Java图形化界面设计——容器(JFrame) 程序是为了方便用户使用的, ...
- 三十二、Java图形化界面设计——布局管理器之CardLayout(卡片布局)
摘自 http://blog.csdn.net/liujun13579/article/details/7773945 三十二.Java图形化界面设计--布局管理器之CardLayout(卡片布局) ...
- 二十七、Java图形化界面设计——容器(JFrame)
摘自http://blog.csdn.net/liujun13579/article/details/7756729 二十七.Java图形化界面设计--容器(JFrame) 程序是为了方便用户使用的, ...
- 三十三、Java图形化界面设计——布局管理器之null布局(空布局)
摘自http://blog.csdn.net/liujun13579/article/details/7774267 三十三.Java图形化界面设计--布局管理器之null布局(空布局) 一般容器都有 ...
随机推荐
- Morris post order traversal algorithm
Sept. 5, 2015 花时间把代码读明白, 比光看书强. 动手写代码, 改代码, 兴趣是最好的老师. 多记几个例子, 增加情趣. 举个例子关于中序遍历, 4 ...
- 【原】让H5页面适配移动设备全家 - 设计师篇 - PPT
上一篇文章<pageResponse - 让H5适配移动设备全家>中分享了一个小插件让一套H5页面适配几乎所有移动设备,得到了一些同学的推荐和认可,这里感谢大家的支持. 在此之前也在部门前 ...
- google protobuf安装与使用
google protobuf是一个灵活的.高效的用于序列化数据的协议.相比较XML和JSON格式,protobuf更小.更快.更便捷.google protobuf是跨语言的,并且自带了一个编译器( ...
- url中的特殊符号含义
1. # 10年9月,twitter改版.一个显著变化,就是URL加入了"#!"符号.比如,改版前的用户主页网址为http://twitter.com/username改版后,就变 ...
- 关于EventEmitter的用法
EventEmitter的基本用法: var EventEmitter = require("events").EventEmitter; var ee = new EventEm ...
- 监控系统Opserver的配置调试
Stack Exchange开源其监控系统Opserver有一段时间了.之前在项目中用过他们的MiniProfile来分析页面执行效率和帮助新人了解项目,当他们开源了其监控系统的时候正好部门也在关注监 ...
- [LeetCode] Is Subsequence 是子序列
Given a string s and a string t, check if s is subsequence of t. You may assume that there is only l ...
- [LeetCode] Russian Doll Envelopes 俄罗斯娃娃信封
You have a number of envelopes with widths and heights given as a pair of integers (w, h). One envel ...
- windows批处理运行java程序
明确需求 今天你编了一个java swing版照片查看器,想让计算机上的所有照片默认打开方式都改成你的照片查看器. 使用工具软件 很多工具软件都是不把jre打包到exe中的,这就是说打包之后的exe只 ...
- RTMP流媒体播放过程
RTMP协议规定:第一步,建立一个网络连接(NetConnection):客户端和服务端的基础连通关系 第二步:建立一个网络流(NetStream)发送多媒体的通道(只能建立一个网络连接,可以建立 ...