1、演进
(1)Sun已经提供了一个跨平台GUI开发工具包AWT抽象窗口工具箱(Abstract Window Toolkit)
(2)Sun又创建了一个新的gui框架swing,解决了awt存在的Icd(本地化)问题(swing是awt的继承发展,但Swing不是AWT的子类)
(3)IBM认为swing比较消耗内存,创建了一个新的GUI库,这就是SWT
(4)IBM为了方便开发SWT程序,在SWT基础上又创建了一个更易用功能强大的图形包”JFace“
注:java图形界面开发一般使用swing。awt和Swing都是java中的包。awt在不同的操作系统不能显示相同的风格,所以才有swing解决本地化问题,在不同的操作系统中显示相同的风格。
2、awt与swing联系与区别(参考网络)
(1)实现原理
AWT的图形函数与操作系统提供的图形函数有着一一对应的关系。也就是说,当我们利用 AWT构件图形用户界面的时候,实际上是在利用操作系统的图形库。不同的操作系统其图形库的功能可能不一样,在一个平台上存在的功能在另外一个平台上则可能不存在。为了实现Java语言所宣称的"一次编译,到处运行"的概念,AWT不得不通过牺牲功能来实现平台无关性。因此,AWT 的图形功能是各操作系统图形功能的“交集”。因为AWT是依靠本地方法来实现功能的,所以AWT控件称为“重量级控件”。 而Swing ,不仅提供了AWT 的所有功能,还用纯粹的Java代码对AWT的功能进行了大幅度的扩充。例如:并不是所有的操作系统都提供了对树形控件的支持, Swing则利用了AWT中所提供的基本作图方法模拟了一个树形控件。由于 Swing是用纯粹的Java代码来实现的,因此Swing控件在各平台通用。 因为Swing不使用本地方法,故Swing控件称为“轻量级控件”。
(2)区别
a.AWT 是基于本地方法的C/C++程序,其运行速度比较快;Swing是基于AWT的Java程序,其运行速度比较慢。
b.AWT的控件在不同的平台可能表现不同,而Swing在所有平台表现一致。
(3)在实际应用中,应该使用AWT还是Swing取决于应用程序所部署的平台类型
a.对于一个嵌入式应用,目标平台的硬件资源往往非常有限,而应用程序的运行速度又是项目中至关重要的因素。在这种矛盾的情况下,简单而高效的AWT当然成了嵌入式Java的第一选择。
b.在普通的基于PC或者是工作站的标准Java应用中,硬件资源对应用程序所造成的限制往往不是项目中的关键因素。所以在标准版的Java中则提倡使用Swing, 也就是通过牺牲速度来实现应用程序的功能。
3、JFrame是一个顶层容器类(可以添加其它swing组件的类),它是Frame的子类,位于javax.swing.JFrame包下
代码示例:
import javax.swing.JButton;
import javax.swing.JFrame;
public class Demo1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//JFrame是一个顶层容器类(可以添加其它swing组件的类)
JFrame jf=new JFrame();
JButton jb1=new JButton("我是按钮");
jf.add(jb1);
jf.setTitle("hello world!");
jf.setSize(400, 400);
jf.setLocation(100, 200);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
}
开发时代码应该这样写,更能体现面向对象思想:
import javax.swing.JButton;
import javax.swing.JFrame;
public class Demo1 extends JFrame{
JButton jb1=null;
public static void main(String[] args) {
Demo1 demo1=new Demo1();
}
//构造函数
public Demo1(){
jb1=new JButton("我是按钮");
this.add(jb1);
this.setTitle("hello world!");
this.setSize(400, 400);
this.setLocation(100, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}