Java ——对Swing、AWT和SWT的认识

对Swing、AWT和SWT的认识

摘要:现在java提供了除swing之外的图形GUI开发工具,那么他们之间有什么区别呢?本文主要分析了Swing,AWT和SWT他们之间的区别。

  1、 三者的概述:

  AWT(Abstract Window Toolkit) 是 API为Java 程序提供的建立图形用户界面GUI (Graphics User Interface)工具集,基于一个对等体实现的。AWT可用于Java的applet和applications中。它支持图形用户界面编程的功能包括: 用户界面组件;事件处理模型;图形和图像工具,包括形状、颜色和字体类;布局管理器,可以进行灵活的窗口布局而与特定窗口的尺寸和屏幕分辨率无关;数据传送类,可以通过本地平台的剪贴板来进行剪切和粘贴。

  SWT("Standard Widget Toolkit",是一个最初由IBM开发的工具包,现在由Eclipse基金会维护。)是一个独立于平台的,也是基于一个对等体实现的,可以脱离 Eclipse 框架单独使用的图形组件,用JNI技术提供与本机系统同样的用户界面组件的观感,较好的运行效率,稳定的平台表现。一个SWT应用程序的基本组成部分为显示界面(Display)、命令界面(Shell,使命令进入并使运行初始化)和窗口部件(Widgets)。Display负责管理事件循环和控制UI线程和其他线程之间的通讯。Shell是应用程序中被操作系统窗口管理器管理的窗口。每个SWT应用程序至少需要一个Display和大于等于1个的Shell实例。

  Swing是基于AWT的架构之上的,在不改变大量的程序代码前提下允许程序中每个组件观感的变化。支持可更换观感技术的引入允许Swing组件在模拟原生组件外观的同时又保持了平台独立的优点。

  2、 三者的区别

  AWT、SWTt都依赖底层平台,都基于对等体实现的,在不同的操作系统上开发出来的程序显示效果不一样,SWT提供比AWT更为丰富的组件集;而Swing对底层平台的依赖很少,所以给不同用户一致的感觉,还拥有一个丰富、便捷的用户界面元素集合。由于AWT和SWT都持有对本地组件的引用,它们必须以正确的方式释放这些引用以避免内存泄露和JVM崩溃。AWT将绝大多数资源管理任务交给系统,不过这使得AWT的实现复杂化了。一旦它实现了,开发者很少有机会犯错误并使他们的程序崩溃。而SWT是采用另外的方法,它有一条法则就是:谁创建,谁释放。因此开发者必须谨慎地显式调用dispose方法释放每一个由他创建的组件和资源。这虽然简化了SWT的实现模型,但把开发者摆在了因错误编码而易于造成程序崩溃这一风险之上。

  awt只提供所以操作系统都有的控件,即全部调用的是本地操作系统的控件;Swing只是窗口和框架等的顶层的组件调用操作系统控件,大部分都是使用java代码来模拟的;swt大部分是用的本地操作系统的控件,有些在别的操作系统的控件要经过自己的绘制。Swing和SWT都在实现上都使用模拟。SWT是模拟平台上缺失的组件。区别是SWT的模拟更像是AWT的Canvas实现的模拟。SWT的Composite类有它自己在操作系统中相应的对等体。它从自己的对等体中获得所有它所需要的资源如图形处理的对象,字体和颜色等。它直接从操作系统获取所有的事件并进行处理。然而,Swing组件在操作系统中没有相应的对等体。它只是一块顶层容器中的逻辑区域,实际上它从顶层容器的对等体中借用资源。Swing的事件并不是底层系统产生的事件。它们实际是由顶层容器处理AWT事件所产生的伪事件。另一个不同之处是Swing组件的z-order系统是来自于AWT组件的。Swing是基于awt的架构之上的,故Swing组件与顶层AWT容器共享一个对等体。因此,Swing组件也和顶层容器有相同的z-order。SWT和AWT组件都有不同于顶层容器的z-order,通常是高于顶层容器。故而如果AWT组件和Swing组件混合在一起的话,Swing组件将可能被AWT组件遮住。当操作系统开始更新UI的时候,顶层容器和Swing组件总是先于AWT组件绘制。当它们完成绘制,AWT组件会覆盖Swing可能绘制过的地方。因此不提倡Swing和AWT组件的混用。如果有一个浮动的Swing组件如菜单,AWT组件很可能遮盖菜单。

时间: 2024-10-12 20:35:09

Java ——对Swing、AWT和SWT的认识的相关文章

JAVA开发简易计算器界面-SWT

大家好,我是成都[LD],博客四年前就申请了,一直没打理,最近正好有时间,遂萌生了写技术博客的念头.我不得不感慨现在新技术更新很快,一不小心,就感觉自身就Out了.记得一年前,当时我也是在51CTO上了解到NoSQL和Hadoop这样的信息,当时就简单觉得很新奇,没想到一年之后发展如此迅速~~当然我这样说,并不是叫大家去追寻新技术,最根本的还是基础打牢靠,休息的时候多去了解下最新的IT动态.学习下前辈高手的一些技能~~打铁还需自身硬嘛! 我写博客的目的:一来是为了促进自身的进步,二来是为了希望与

JAVA学习Swing章节按钮组件JButton的简单学习

package com.swing; import java.awt.Container; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.net.URL; import javax.swing.Icon; import javax.swing.ImageIcon;

java实现 swing模仿金山打字 案例源码

java实现 swing模仿金山打字 案例源码,更多Java技术就去Java教程网.http://java.662p.com 代码: <font size="3">import Java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.io.File; import java.io.IO

(转)Java 的swing.GroupLayout布局管理器的使用方法和实例

摘自http://www.cnblogs.com/lionden/archive/2012/12/11/grouplayout.html (转)Java 的swing.GroupLayout布局管理器的使用方法和实例 GroupLayout 是一个 LayoutManager,它将组件按层次分组,以决定它们在 Container 中的位置.GroupLayout 主要供生成器使用,但也可以手工编码.分组由 Group 类的实例来完成.GroupLayout 支持两种组.串行组 (sequenti

JAVA学习Swing章节流布局管理器简单学习

package com.swing; import java.awt.Container; import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.WindowConstants; /** * 1:流(FlowLayout)布局管理器是布局管理器中最基本的布局管理器,流布局管理器在整个容器中 * 的布局正如其名,像流一样从左到右摆放组件,直到占据了这

用java的swing写了个图片标注工具

功能说明: 1 鼠标单击:选取裁剪区域 2 鼠标双击:选取裁剪区域,并把裁剪区域保存为文件,同时把区域中心点的坐标保存 3 打开图片:从某个文件夹打开图片并显示,同时把该目录的所有图片的路径载进来.这个功能主要是针对这么种情况, 假如处理某个文件夹的图片集,在某一张终止了或者暂停了,下一次要从这种图片开始. 4 保存坐标:把裁剪区域保存为文件,同时把区域中心点的坐标保存 5 打开目录:把该目录的所有图片的路径载进来. 6 下一张:展示下一张图片. 常见用法: 1 "打开目录",这时会将

Java的Swing插件的使用

为了完成java实验5,我下载了Java的Swing插件,下载安装的过程就不再赘述,这有一个教程点这里 经过摸索,我学会了插件的基本使用 1. 在Eclipse中创建一个Java Project,建立一个包,如图所示 2.如图所示,点击other选项 3.如图选择Application Window,再点next 4.进入这个页面,Source folder选择之前建好的工程的src文件夹,Package选择工程中的包,Name自己定义,点finish 5.这时在包中就会有一个叫做NewWind

你也可以用java的swing可以做出这么炫的mp3播放器_源码下载

I had published the blog : 你用java的swing可以做出这么炫的mp3播放器吗? and to display some screenshots about this MP3 Player. The target for this blog is that to publish the source code, and you can download the source code and give me some advices if possible. The

你用java的swing可以做出这么炫的mp3播放器吗?

这个mp3播放器是基于java的swing编写的,我认为界面还是可以拿出来和大家看一看评一评. 先说说创作的初衷,由于前段时间工作不是很忙,与其闲着,还不如找一些东西来给自己捣腾捣腾,在 之前写的 java开发_闹钟 和 pygame系列_百度随心听_完美的UI设计 的驱使下产生了编写这个mp3的灵感. 也许大伙儿可能认为我脑袋是不是被骡子踢了,闲着真没事,干嘛非得再往工作(工作上面也是coding)上面靠,其实可以 搞一些其他的东西嘛,如运动啊,旅游啊,看书啊(看书倒是一直坚持着的,如果可以我